为什么jQuery Asual Address插件会触发两次更改事件?

问候, 我正在使用jQuery Asual Address插件: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>
    
已邀请:
尝试使用internalChange和externalChange函数。 http://jsfiddle.net/5L6Ur/9/     
我解决这个问题的方法是设置
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 calbacks可以实现相同的功能。     
我花了很多时间来解决同样的问题。我已经缩小了原因,但除了回避之外,我没有提供解决方案。问题是由您在示例中创建的哈希值中的“=”引起的。我猜这个问题与插件执行的解析有关,因为我用许多常见的分隔符来重新创建问题(“=”,“&amp;”,“|”,“:”,“;” )。您可以通过用其他人替换这些麻烦的字符来避免双击问题(我正在使用“/”和“。”)。 这是我所看到的症状的更具体的解释。使用.change()方法或.externalChange()和.internalChange方法的组合,在IE和Firefox中都会发生更改事件的双重触发。如果使用.change()方法,则没有真正指示发生了什么,但使用内部和外部方法可以让您更深入地了解问题。内部更改事件似乎行为正常,仅在触发事件实际为内部时触发。但是,无论触发事件是内部事件还是外部事件,外部事件似乎始终触发。结果是外部事件“正确”触发,意味着只触发externalChange()方法。内部事件“错误地”触发,导致双击 - internalChange()方法按预期触发,但externalChange()方法也会触发。 希望这可以帮助。     
看起来github(1.4)上最新版本的插件修复了这个问题。 这是使用最新插件的更新示例: http://jsfiddle.net/5L6Ur/10/     
你不应该用$(function(){})包装它;功能。然后它工作     

要回复问题请先登录注册