recherche

Maison  >  Questions et réponses  >  le corps du texte

Besoin d'un script jquery pour déplacer les options sélectionnées à partir d'une zone de sélection en fonction de la sélection actuelle de l'utilisateur final

J'ai une page HTML où l'utilisateur final peut classer nos articles via un élément de boîte de sélection.

Voir le violon pour une démo simple :

https://jsfiddle.net/Balkanlii/ghecv1j8/1/

Je souhaite créer un script jquery qui modifie l'option sélectionnée si le même classement est sélectionné une seconde fois (si l'utilisateur final change d'avis, etc.). Alors :

J'ai construit une requête qui fonctionne avec succès à cet effet, mais le script est interrompu en raison des conditions suivantes :

Comment y remédier ?

Aussi, existe-t-il un meilleur moyen que le mien, j'aimerais savoir car la façon dont je le fais devient de plus en plus compliquée.

Toute aide serait grandement appréciée.

Mon script jQuery jusqu'à présent :

var previousValue = 0;
$("select[class='myclass']").on('focusin', function(){
     previousValue = $(this).val();
});

$("select[class='myclass']").on('change', function (event) { 
    var prevValue = parseInt(previousValue);
    var selectedValue = parseInt($(this).val());
    var selectedId = $(this).attr('id');

    $('#' + selectedId + " option").removeAttr("selected");
    $('#' + selectedId + " option[value=\""+selectedValue+"\"]").attr('selected', true);

    $("select[class='myclass']").each(function (index, element) { 
           var eval = parseInt($('#' + element.id).val());
            if (prevValue !== 0 && selectedValue !== 0) {
                if (eval >= selectedValue && (eval < prevValue) && element.id !== selectedId) {
                       var b = eval + 1;
                        if (b <= 3)
                            $('#' + element.id).prop('selectedIndex', b);
                        $('#' + element.id + " option").removeAttr("selected");
                        $('#' + element.id + " option[value=\"" + b + "\"]").attr('selected', true);

                }
                else if (eval <= selectedValue && (eval > prevValue) && element.id !== selectedId) {
                       var b = eval - 1;
                       $('#' + element.id).prop('selectedIndex', b);
                       $('#' + element.id + " option").removeAttr("selected");
                       $('#' + element.id + " option[value=\"" + b + "\"]").attr('selected', true);
                            }
                }
                else if (prevValue == 0) {
                            if (selectedValue > 0) {
                                if (eval >= selectedValue && element.id !== selectedId) {
                                    var b = eval + 1;
                                    if (b <= 3) {
                                        $('#' + element.id).prop('selectedIndex', b);

                                        $('#' + element.id + " option").removeAttr("selected");
                                        $('#' + element.id + " option[value=\"" + b + "\"]").attr('selected', true);
                                    }
                                }
                            }
                }
        });
 });

P粉170858678P粉170858678273 Il y a quelques jours3740

répondre à tous(1)je répondrai

  • P粉301523298

    P粉3015232982024-04-05 16:02:41

    Vous pouvez désactiver les options sélectionnées dans d'autres champs en procédant comme suit. Voici une capture d'écran de son fonctionnement...

    (function($) {
    
      const $all = $('select.myclass');
      
      $all.on('change input', function() {
    
        $all.find('option[disabled]').prop('disabled', false);
        
        $all.each(function() {
          const $this = $(this);
          const value = $this.val();
          
          $all.not($this).find(`option[value="${value}"]`)
            .prop('selected', false)
            .prop('disabled', !!parseInt(value));
        });
      });
    
    })(jQuery);
    sssccc
    Project 1
    
    Project 2
    Project 3

    répondre
    0
  • Annulerrépondre