Первые проблемы с плагином jQuery - PullRequest
1 голос
/ 08 марта 2009

Эй, ребята, во-первых, позвольте мне сказать, что я JQuery Noob! Я хочу сделать простой плагин, который автоматически заполняет HTML-элемент выбора, он отлично работает на первом элементе, но когда я вызываю его снова для заполнения второго, он ничего не добавляет. Вот мои звонки на вкладке ajax, где #product и # new-category являются элементами выбора:

$(function(){

    $("#product").popSelect("products");

    $("#new-category").popSelect("categories");

});

HTML:

><select id="product" name="product">
>     < option value="">Select Product</option>                 
></select >     
><select id="new-category" name="new-category">
>      < option value="">Select Category< /option>                  
></select >

А вот и плагин:

(function(jQuery){
jQuery.fn.popSelect = function(table) {

    return jQuery(this).each(function(){            

        var obj = jQuery(this); 

        if(this.nodeName.toLowerCase() == 'select'){
            jQuery.getJSON("../app/modules/ajax/json.php", { table:table },
                function(data){                 
                    var options = '';           
                    jQuery.each(data, function(i,item){                                        
                        options += '<option value="' + item.id + '">' + item.title + '</option>';                   
                    });                 
                    obj.append(options);                
                });     
        };
    });
};
})(jQuery);

Странно, если я изменю второй вызов функции $("#new-category").popSelect("categories"); до $("[id^='new-category']").popSelect("categories"); тогда он работает нормально, что-то не так с моим селектором?

Спасибо за любую помощь!

Ответы [ 4 ]

1 голос
/ 11 марта 2009

Я только что ответил на похожий вопрос, в основном вы не можете иметь два элемента с одинаковым идентификатором на одной странице , это вызывает именно эту проблему. Вам придется использовать класс или изменить один из идентификаторов.

0 голосов
/ 09 марта 2009

Хорошо, так что-то вроде этого?

(function($){
jQuery.fn.popSelect = function(table) {

    return $(this).each(function(){         

        var obj = $(this);  

        if(this.nodeName.toLowerCase() == 'select'){
            obj.queue("fx", function(){$.getJSON("../app/modules/ajax/json.php", { table:table },
                function(data){                 
                    var options = '';           
                    $.each(data, function(i,item){                                         
                        options += '<option value="' + item.id + '">' + item.title + '</option>';                   
                    });             
                    obj.append(options);                
                }); }); 
        };
    });};})(jQuery);

Я не получаю ошибок, но он все еще только заполняет первый выбор, тот же ответ в IE. Удивительно, даже добавить функцию «ожидания» между вызовами, и это ничего не сделало. С тегом id == name в порядке? Что-то, что я только что заметил, замена "id = 'new-category'" на "id = 'newwcategory'" заставляет его работать !? Что-то не так с "-" в идентификаторах?

Еще раз спасибо за всю помощь!

0 голосов
/ 10 марта 2009

С тех пор я установил, что это проблема с вкладками пользовательского интерфейса jQuery, поскольку плагин прекрасно работает без них! Элементы в текущей выбранной вкладке не заполняются, если ранее выбранная вкладка имела элемент с той же Я бы. Пример:

первая вкладка:

<select id="new_category" name="new_category">

     <option value="">Select Category</option>
</select>

Вторая вкладка:

<select id="product" name="product">
      <option value="">Select Product</option>
</select>

<select id="new_category" name="new_category">
      <option value="">Select Category</option>
</select>

Третья вкладка:

<select id="product" name="product">
      <option value="">Select Product</option>
</select>

Переход от вкладки 1 к вкладке 2 - продукт будет заполнен, но не будет новая категория и переход от вкладки 2 к вкладке 3 - товар не будет заполнен ...

т.е. если элемент с идентификатором, эквивалентным предыдущей вкладке, существует в текущая вкладка, она не будет заполнена и (возможно?) предыдущая вкладка элемент будет, хотя я не могу видеть это, так как он не загружен. Я пробовал возиться с кешем, но это не помогает, указав идентификатор формы так как его родитель должен это исправить, но зачем это нужно, не должны ли вкладки быть независимыми?

0 голосов
/ 09 марта 2009

У меня нет прямого ответа, но похоже, что у вас будет 2 активных вызова ajax, по сути, ожидающих одновременно, что может привести к некоторой странности?

...