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