jQuery Избран плъгин - първата опция не задейства събитие за промяна?

Така че използвам доста хубавия плъгин jQuery, Chosen; http://harvesthq.github.com/chosen/

Това, което правя, всъщност е да работя с ДВЕ падащи менюта в стил Chosen по начин „или/или“, т.е. потребителят трябва да избере опция от едното ИЛИ от другото.

Така че, когато потребителят избере едно от падащите менюта, другото (чрез javascript) се връща към деактивираната си стойност по подразбиране.

И двете падащи менюта са подкрепени от ЕДИН скрит параметър, за да задържат действително избраната стойност, без значение от кое падащо меню идва. Това се попълва чрез слушатели и в двете падащи менюта на събитието .chosen().change().

Единственият проблем е, че не изглежда да задейства събитие „промяна“, когато потребителят избере една от първите опции в което и да е падащо меню, предполагам, че това изглежда е вече избраната опция и следователно не е „промяна“. Но и двете падащи менюта действителната първа опция (т.е. в jsp) е деактивирана опция с нормалния текст „Моля, изберете“.

Има ли начин да се задейства събитието за промяна, дори ако избраната опция вече е избрана? Или има просто събитие "избор", което се задейства, дори ако не е имало промяна?


person Nick Foote    schedule 12.10.2012    source източник


Отговори (4)


можете да използвате .trigger("change") или .change() на вашия jquery обект, за да задействате ръчно събитието за промяна.

person Nikko Reyes    schedule 12.10.2012
comment
Проблемът е, че плъгинът Chosen скрива много от това. Нормалният избран обект всъщност не се показва и Chosen изгражда свой собствен. - person Nick Foote; 22.10.2012
comment
Но когато използвах selected, все още мога да задействам събитията на моя действителен обект за избор. Можете ли да покажете кода си? - person Nikko Reyes; 23.10.2012
comment
той говори за добавяне на $('#selectId').change() към вашия избор, след като промените стойността, за ръчно извикване на събитието за промяна. Все пак получавам същата грешка. Използвам jquery.val(), за да променя стойността на select. Когато направя това и след това избера първата опция, това няма да задейства събитието за промяна. Ако избера друга опция, тя ще задейства събитието за промяна, както и ако избера друга опция и след това избера първата опция, това ще задейства събитието за промяна. Мисля, че ръчното настройване на .val() не работи съвсем. - person Tyler; 01.11.2012
comment
Ако не използвам избран за избор, работи. Надяваме се, че това помага на всеки, който отстранява този проблем. - person Tyler; 01.11.2012

Това проработи за мен:

//Get the dynamic id given to your select by Chosen
var selId = $('your_select').attr('id');
//Use that id to remove the dynamically created div (the foe select box Chosen creates)
$('#'+ selId +'_chzn').remove();
//Change the value of your select, trigger the change event, remove the chzn-done class, and restart chosen for that select
$('#'+selId).val('your_new_value').change().removeClass('chzn-done').chosen();

С две думи, вие сте твърдо нулиране, избрано за вашия избор. Може да има по-лесен начин от този, но това работи за мен.

person Tyler    schedule 01.11.2012

Току-що имах същия проблем с помощта на плъгина Select2 (римейк на плъгина Chosen).

Забравих реда "allowClear: true", когато декларирах Combobox като select2.

$('#selectLabelMap').select2({
                   placeholder: "Sélectionner un label",                 
                   allowClear: true    // <=  don't forget "allowClear: true (re-init the comboBox)
               }        
person Antoine Charcosset    schedule 22.10.2015

Задействайте промяната за първи път, когато (DOM) е готов.

    jQuery(function ($) {

        $('#myselect').trigger("change");   

    });
person Tejpal Sharma    schedule 29.09.2016