2011-02-25 64 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