1

ご挨拶、

jQuery Asual Addressプラグインを使用しています:http ://www.asual.com/jquery/address/

何らかの理由で、FirefoxとIE(Chromeは除く)では、パラメーターの1つがURL( "http://"で始まる)の場合、アドレス変更イベントが2回発生します。

これが例のあるフィドルです:http://jsfiddle.net/5L6Ur/

「foo」リンクをクリックすると、私の問題がわかります。どんな助けでも大歓迎です。

コード:

$(function() {
    $('a').click(function(e) {
        e.preventDefault();
        $.address.value($(this).attr('href'));
    });
    var changecount = 0;
    $.address.change(function(event) {
        $('span').html(changecount++);
    });
});

<a href="?u=http://foo.bar">foo</a><br />
<a href="?u=foo.bar">bar</a><br />
<span></span>
4

5 に答える 5

3

internalChange および externalChange 関数を使用してみてください。

http://jsfiddle.net/5L6Ur/9/

于 2011-03-11T16:25:23.210 に答える
2

searchingこの問題に対する私の回避策は、変数を設定することです。

何かのようなもの:

$(function () {
  var searching = false;
  $('form.ajaxified').live('ajax:beforeSend.rails', function(){
    $.address.value('?' + $('form.ajaxified').serialize());
    searching = true;
  });
  $('form.ajaxified').live('ajax:complete.rails', function(){
    searching = false;
  });
  $.address.externalChange(function(event) {
    if (!searching) {
      $('form.ajaxified').submit();
    }
  });
});

これにより、ユーザーとして(フォームを送信して)トリガーしたときに二重の ajax リクエストが発生するのを防ぎますが、戻るボタンを押すかページをリロードすると実行されます。それが役立つことを願っています。

PS イベントはレール固有のものですが、JQuery Ajax カルバックを使用して同じことを実現できます。

于 2011-03-31T13:25:03.877 に答える
1

この同じ問題のトラブルシューティングに多くの時間を費やしました。原因を突き止めましたが、回避以外に提供できる解決策がありません。この問題は、例で作成しているハッシュ値の「=」が原因です。多くの一般的な区切り文字 (「=」、「&」、「|」、「:」、「;」) で問題を再現したため、問題はプラグインによって実行される解析に関係していると推測しています。 . これらの厄介な文字を別の文字に置き換えることで、二重発火の問題を回避できます (「/」と「.」を使用しています)。

ここでは、私が見ている症状のより具体的な説明を示します。.change() メソッドまたは .externalChange() メソッドと .internalChange メソッドの組み合わせを使用して、IE と Firefox の両方で変更イベントの二重起動が発生します。.change() メソッドを使用する場合、実際に何が起こっているかを示すものはありませんが、内部メソッドと外部メソッドを使用すると、問題をもう少し深く見ることができます。内部変更イベントは適切に動作しているように見えますが、トリガー イベントが実際に内部にある場合にのみ発生します。ただし、トリガー イベントが内部か外部かに関係なく、外部イベントは常に発生しているように見えます。その結果、外部イベントが「正しく」起動されます。つまり、externalChange() メソッドのみが起動されます。内部イベントが「誤って」発生する

お役に立てれば。

于 2011-03-15T15:39:17.240 に答える
1

github (1.4) のプラグインの最新バージョンでこれが修正されているようです。

最新のプラグインを使用した更新された例を次に示します: http://jsfiddle.net/5L6Ur/10/

于 2011-04-01T04:31:10.230 に答える
0

$(function () { }); でラップしないでください。関数。それからそれは動作します

于 2013-04-05T08:05:48.507 に答える