2011-02-25 73 views
1

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

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

出于某种原因,在Firefox和IE浏览器(而不是浏览器),地址变更事件两次射击时的参数之一是一个网址(以“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> 

回答

3

尝试使用internalChange和externalChange功能。

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

+0

我试着在Firefox中的小提琴,并且当我点击其中一个链接时它触发internalChange和externalChange。另外,init()函数中未定义'a'。 – fehays 2011-03-11 21:32:50

1

我花了很多时间解决此相同的问题。我已经缩小了原因,但除了回避以外,我没有解决方案。问题是由您在示例中创建的散列值中的“=”引起的。我猜这个问题与插件执行的解析有关,因为我用很多常见的分隔符(“=”,“&”,“|”,“:”,“;”)重新创建了问题。您可以通过将这些麻烦的字符替换为其他字符(我使用“/”和“。”)来避免双击问题。

下面是我看到的症状的更具体的解释。使用.change()方法或.externalChange()和.internalChange方法的组合,IE和Firefox都会发生更改事件的双击。如果使用.change()方法,没有真正指示发生了什么,但使用内部和外部方法可以让您更深入地了解问题。内部更改事件似乎表现正常,只有当触发事件实际上是内部时才会触发。然而,无论触发事件是内部还是外部,外部事件似乎都会一直触发。结果是外部事件触发“正确”,这意味着只有externalChange()方法被触发。内部事件触发“不正确”,导致双重触发 - internalChange()方法按预期触发,但externalChange()方法也触发。

希望这会有所帮助。

+0

感谢您的帮助。它看起来有点与编码值有关。我仍然没有解决它,但是这帮助我缩小了范围。 – fehays 2011-03-23 16:29:32

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也可以完成相同的事情。

0

你不应该用$包起来(函数(){});功能。然后它的工作

+0

嗨,欢迎来到StackOverflow。我不认为你的回答是正确的,因为使用'$(function(){});'是标准的事情。你可以解释一下你的想法吗? – 2013-04-05 08:28:20