1

问候,

我正在使用 jQuery Asual 地址插件:http ://www.asual.com/jquery/address/

出于某种原因,在 Firefox 和 IE(但不是 Chrome)中,当参数之一是 url(以“http://”开头)时,地址更改事件会触发两次。

这是一个例子: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 事件是特定于 Rails 的,但同样可以使用 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 回答