1
votes

jQuery si dans le tableau mais exclut une chaîne

J'ai six valeurs d'option de la table de base de données similaires à celle-ci: #blog et #hariciURL et #portfolio bla bla bla similaires comme ceci.

J'ai une autre table qui a ces valeurs, je vérifie si les mêmes valeurs dans le tableau La valeur de l'option sera désactivée mais sauf la valeur de l'option #hariciURL ne sera jamais désactivée.

Comment puis-je exclure #hariciURL non désactivé de ce menu d'options? veuillez vérifier les codes, vous pouvez comprendre ce que je veux dire.

désolé, mon mauvais anglais.

$('#degeriAL option').each(function() {
  var BolumleriAl = $(this).val();

  var seolink = "<?php echo $BolumVarmiSorgula->seolink;?>";
  var bolumisimleri = $('#degeriAL option[name]');

  var Exclude = "#hariciURL"; //this will be never disabled


  if (jQuery.inArray(seolink, BolumleriAl)) {

    $('#degeriAL option[value="' + seolink + '"]').prop("disabled", true).addClass("secimMenusuDisabled").addClass(".secimMenusuDisabled" + "(that already exist, you can not add more than one)").nextAll();
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="degeriAL" name="bolumLink" class="form-control form-control-sm" required="">
      <option value="" required="">Bölüm Seçiniz...</option>
      <option value="#featured-services"> DiÄŸer Hizmetler </option>
      <option value="#about"> Hakkımızda </option>
      <option value="#services"> Hizmetler </option>
      <option value="#call-to-action"> Tıklama Eylemi </option>
      <option value="#blog"> Blog </option>
      <option value="#skills"> Yatay İstatistik Çizelgesi </option>
      <option value="#facts"> Rakamsal Ä°statistik </option>
      <option value="#portfolio"> Ürünler </option>
      <option value="#clients"> Referansların Logoları </option>
      <option value="#testimonials"> Müşteri Görüşleri </option>
      <option value="#team"> Bizim Takım &amp; Çalışanlar </option>
      <option value="#contact"> Ä°letiÅŸim / Form / Harita </option>
      <option value="#hariciURL"> Harici Link </option>
    </select>
    $().ready(function() {

        $('#degeriAL option').each(function() { // option menüsündeki tüm değerleri al
            //console.log(BolumleriAl);
            var BolumleriAl = $(this).val(); // tüm valuelerini bir değişkene ata
            

            var seolink = ("#services", "#hariciURL"); 
            
//var seolink = "<?php echo $BolumVarmiSorgula->seolink;?>"; // this original code come from database.
             console.log(seolink);
            var bolumisimleri = $('#degeriAL option[name]');
            
            var exclude = "#hariciURL"; //this will be never disabled


            if ($.inArray(seolink, BolumleriAl) && BolumleriAl !== exclude) { // iki dizi içinde eşleşen varmı diye bak

                $('#degeriAL option[value="' + seolink + '"]').prop("disabled", true).addClass("secimMenusuDisabled").addClass(".secimMenusuDisabled" + "(bölüm mevcut)").nextAll(); //option menüdeki dizi içinde olan tüm  değerlerini veritabanından gelenlerle karşılaştır ve eşleşenleri option menü içinden disabled yap
            }

        });

    });


11 commentaires

Pourriez-vous simplement inclure une condition supplémentaire à votre instruction if telle que if (jQuery.inArray (seolink, BolumleriAl && $ (this) .id! == Exclude)) Je suppose que 'Exclude' fait référence à l'ID de l'option ici bien que.


Ou simplement supprimer l'élément qui ne sera jamais désactivé de votre éventail de choses à désactiver? Si vous pouviez faire cela juste côté client (mettez quelques exemples de données pour votre écho PHP si vous le pouvez) et montrez-nous l'élément select , cela aiderait à clarifier la question.


Le code est faux. $ .inArray attend une chaîne et un tableau, et votre code passe deux chaînes. Cela signifie qu'il retournera toujours -1, ce qui est vrai, donc tout sera désactivé. Afficher ce que contient seolink et afficher le html rendu du #degeriAL


il s'agit des valeurs seolink: #hariciURL #services


@DoganOzer publie le script rendu pas celui avec php . Nous devons voir à quoi ressemble le script dans votre navigateur.


J'ai édité mon haut principal de message, j'y ai ajouté.


@DoganOzer bien. Pouvez-vous faire de même pour le script?


Comme mentionné par Gabriele Petrioli, inArray () ne renvoie pas de booléen. Il renvoie [-1, 0, ..., n-1] où -1 n'est pas trouvé. Votre conditionnel devra vérifier que la valeur n'est pas -1 pour savoir qu'elle a été trouvée.


J'ai édité mes meilleurs messages, mais juste la dernière valeur désactivée, les variables normales proviennent de la base de données et cela fonctionne normalement. mais voici pourquoi juste le dernier élément désactivant je ne comprends pas.


@DoganOzer ("#services", "#hariciURL") n'est pas un tableau. Les tableaux sont indiqués par [] et non par () . De plus, var seolink = " seolink;?>" ne peut jamais être rendu comme var seolink = ("#services", "#hariciURL") car il y a " autour de lui dans la version php qui ne s'affiche pas dans la version rendue.


@Gabriele Petrioli merci pour l'avis, je vois maintenant. au revoir.


3 Réponses :


0
votes

Vous parcourez les options en boucle, vous pouvez donc simplement vérifier si la valeur de l'option, BolumleriAl , n'est pas celle exclue.

En outre, vous pouvez déplacer les variables seolink et Exclude hors de la boucle, car ceux-ci ne changent pas à chaque fois.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<select id="degereriAL" size="8">
  <option value="https://example.com">Test</option>
  <option value="#hariciURL">Test 2</option>
  <option value="test3">Test 3</option>
  <option value="test4">Test 4</option>
  <option value="test5">Test 5</option>
  <option value="test6">Test 6</option>
  <option value="test7">Test 7</option>
  <option value="test8">Test 8</option>
</select>
select {
  min-width: 10em;
}

select option[disabled] {
  color: #eee;
}
var seolink = "https://example.com";
var Exclude = "#hariciURL"; //this will be never disabled
var Bölümler = ['test3', 'test7'];

$('#degereriAL').children('option').each(function() {
  var currentValue = $(this).val();

  if (currentValue == Exclude || $.inArray(currentValue, Bölümler) > -1) {
    // The value is excluded (#hariciURL)
    // OR the value is in the Bölümler array
  } else {
    $(this)
      .prop("disabled", true)
      .addClass("secimMenusuDisabled");
  }
});


3 commentaires

#hariciURL est toujours en train de désactiver, pas les codes de travail désolé.


@DoganOzer: J'ai ajouté un exemple fonctionnel. Peut-être que vous pouvez l'utiliser pour découvrir pourquoi cela ne fonctionne pas?


Bonjour, merci pour la réponse et l'aide, mais je l'ai corrigé il y a longtemps, merci encore.



1
votes

Ce que vous voulez probablement, c'est

  1. étant donné que les liens secondaires semblent être une chaîne, vous devez les diviser pour qu'ils deviennent un tableau.
  2. vérifiez que le BolumleriAl n'est pas le même que le Exclude
    • s'ils sont différents, vérifiez s'il se trouve dans le tableau seolinks et si oui, désactivez-le
  3. vous êtes déjà en train de parcourir les éléments option donc pas besoin d'utiliser un sélecteur pour trouver l'élément à désactiver. Utilisez simplement ceci .

$('#degeriAL option').each(function() {
  var BolumleriAl = $(this).val();

  var seolink = "<?php echo $BolumVarmiSorgula->seolink;?>".split(' ');

  var Exclude = "#hariciURL"; //this will be never disabled

  if (BolumleriAl !== Exclude && $.inArray(BolumleriAl, seolink) > -1) {
    $(this).prop("disabled", true)
      .addClass("secimMenusuDisabled")
      //.addClass(".secimMenusuDisabled" + "(that already exist, you can not add more than one)");
  }
});


2 commentaires

Je pense que mon erreur est de ne pas créer de tableau, ai-je tort?


@DoganOzer l'un des problèmes était que, oui.



0
votes

D'après ce que j'ai compris de votre question, je pense que votre condition if a été inversée.

De plus, vous devez utiliser la valeur donnée par la fonction $ .each

var seolink = "<?php echo $BolumVarmiSorgula->seolink;?>";
var Exclude = "#hariciURL"; //this will be never disabled

$('#degeriAL option').each(function(i,v) {

  Exclude = v != Exclude && $.inArray(seolink, v) ?  $('#degeriAL option[value="' + seolink + '"]').prop("disabled", true).addClass("secimMenusuDisabled").text('that already exist, you can not add more than one') : "#hariciURL";

});

p>


0 commentaires