0

あなたたちがこれまで私に与えてくれたすべての助けに感謝します!! :D

そして今、私はjqueryとajaxを使用して私にいくつかの問題に遭遇します

私は自分のデータベースからすべてのユーザーの写真をフェッチし、それらをグリッドに呼び出してから、このコードを使用してjqueryページネーションプラグイン「pajinate」を適用しています

$(function(){
    $('#talent_paging').pajinate({
        num_page_links_to_display : 4,
        items_per_page : 15,
        nav_label_first : '«',
        nav_label_prev : '<',
        nav_label_next : '>',
        nav_label_last : '&raquo;'
    });
});

ソース:jquery.pajinate

このページは、年齢、性別、キーワードなどの特定のパラメーターを使用した検索に関するものであり、このコードを使用して、フォームの送信を処理するためにajaxformを使用しています

$(function() { 
    var options = { 
        target:'#talent_paging',
    };
    $('#search_talent').ajaxForm(options); 
});

ソース:ajaxForm

ご想像のとおり、最初のページの読み込みではページネーションはうまく機能していますが、検索を実行するとすぐに失敗します。jquery datatableを使用していて、各行を操作しようとしたときに、これに関して同様の問題が実際に発生しました。最初のページでは正常に機能していましたが、次のページでは失敗します。

.delegate()を使用してデータテーブルの問題を解決しましたが、これにも同じ問題があることがわかりました。ページネーション検索問題にデリゲートメソッドを追加する方法をいくつか試しましたが、実際に何をしているのかわからない試行でした。 (このペーストをコピーしてください:p).delegate()がどのように機能するか本当に理解していないので

だから、これらの質問で私を助けてください

委任は私の現在の問題を解決するための最良の方法ですか?

もしそうなら、.delegate()がどのように機能するかを理解するのを手伝ってください

ありがとう

4

2 に答える 2

0

Are you using IE prior to IE8? If so, that could be the problem — you have what used to be a syntax error (or at least ambiguity), but AFAIK only IE will care about it:

$(function() { 
    var options = { 
        target:'#talent_paging', // <=== This comma is the error
    };
    $('#search_talent').ajaxForm(options); 
});

The grammar for object literals didn't until recently explicitly allow a trailing comma. SpiderMonkey (Firefox), V8 (Chrome), and whatever Safari and Opera use don't care, but prior to JScript 6 (IE8), JScript (IE) throws a parsing exception on the comma and your script dies. A similar but different thing happens if you do it with an array literal:

var a = [1, 2, 3, 4, 5, ];

IE (JScript) creates an array with six (yes, six) entries, the last of which is undefined. This isn't unreasonable, because we were always allowed to have blank entries (e.g., var a = [1, , 3];) and those entries defaulted to undefined, but everyone else went the other way and created an array with five entries.

The recent 5th edition specification clears this up (yay!). The trailing comma is explicitly allowed in object literals (Section 11.1.5) and array literals (Section 11.1.4), and in the case of array literals it doesn't add to the length of the array (a.length above is 5).

The latest released version of IE uses JScript 6, which now allows the trailing comma on object literals, but still has the issue with the extra entry at the end of the array. Hopefully now that ECMAScript 5 nailed that down, the next version of Microsoft's JScript will change that, although it has to be a harder sell for them...

于 2010-09-21T07:50:30.187 に答える
0

$().delegate() only works on events, e.g. clicks, mouseovers, focuses, etc. There is a concept in Javascript called "bubbling". This means that, unless you explicitly say otherwise, every event will "bubble" its way up the DOM tree and will be triggered on every element in the tree. This means that you can use a common ancestor element to "trap" all events of a particular type on child elements.

This will not work, as I understand it, on the pajinate plugin, because it does not use events. I believe it modifies the document at the moment of the call.

You need to use a callback function to call $('#talent_paging').pajinate() each time the ajaxform has finished its work:

$(function() { 
    var options = {
        target:'#talent_paging',
        success: function() {
            $('#talent_paging').pajinate({
                num_page_links_to_display : 4,
                items_per_page : 15,
                nav_label_first : '&laquo;',
                nav_label_prev : '<',
                nav_label_next : '>',
                nav_label_last : '&raquo;'
            });
        }
    }

    $('#search_talent').ajaxForm(options); 
});

Note that this code is not excellent in terms of optimisation, but it's hard to do that without seeing your base HTML.

于 2010-09-21T08:06:11.933 に答える