1

やあ皆さん、まず最初に、私は jQuery 初心者だとだけ言わせてください。HTML select 要素を自動入力する単純なプラグインを作成したいのですが、最初の要素では正常に動作しますが、もう一度呼び出して 2 番目の要素を入力すると、何も追加されません。#product と #new-category が選択要素である ajax タブでの私の呼び出しは次のとおりです。

$(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);

奇妙なことに、2 番目の関数呼び出しを変更すると正常 $("#new-category").popSelect("categories");$("[id^='new-category']").popSelect("categories"); 動作します。セレクターに何か問題がありますか?

助けてくれてありがとう!

4

4 に答える 4

1

同様の質問に答えたところです。基本的に、同じページに同じ ID を持つ 2 つの要素を含めることはできません。この正確な問題が発生します。クラスを使用するか、ID の 1 つを変更する必要があります。

于 2009-03-10T21:24:50.223 に答える
0

直接の答えはありませんが、2つのアクティブなajax呼び出しが本質的に同時に未処理になり、奇妙なことにつながる可能性がありますか?

于 2009-03-08T21:59:23.340 に答える
0

わかりましたので、このようなものですか?

(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'」に置き換えると、機能することに気付きました!? ID の「-」に何か問題がありますか?

これまでのすべてのヘルプにもう一度感謝します!

于 2009-03-09T17:04:32.277 に答える
0

プラグインは jQuery UI タブがなくても完全に機能するため、これは jQuery UI タブの問題であることを確認しました。以前に選択したタブに同じ ID の要素があった場合、現在選択されているタブの要素は取り込まれません。例:

最初のタブ:

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

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

2 番目のタブ:

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

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

3 番目のタブ:

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

タブ 1 からタブ 2 に移動 - 製品は入力されますが、new_category は入力されず、タブ 2 からタブ 3 に移動 - 製品は入力されません...

つまり、以前のタブと同等の id を持つ要素が現在のタブに存在する場合、それは読み込まれず、(おそらく?) 以前のタブ要素は読み込まれていないため表示されません。キャッシュをいじってみましたが、助けにはなりません。フォーム ID をその親として指定すると、これを修正する必要がありますが、タブが独立していてはならないのはなぜですか?

于 2009-03-10T14:41:52.610 に答える