2012-03-06 131 views
0

URL是在這裏:http://prorankstudios.com/sandbox/wtf/JQUERY點擊處理器從不同的元素觸發輸入?

使用IE9,重點放在用戶或通場,敲回車鍵...

注意,這整個頁面重新加載。

發生的事情是,當沒有點擊發生在#live_site_link在所有的#live_site_link(分配上common.js的第30行)單擊處理程序正在運行...

登陸發佈代碼:

Login.Submit = function(e) 
{ 
    Login.feedback.empty(); 
    if (Login.user.val() == '') 
    { 
     Camo.ErrorAlert('Invalid username.',Login.feedback); 
     Login.user.focus().select(); 
     return false; 
    } 
    if (Login.pass.val() == '') 
    { 
     Camo.ErrorAlert('Invalid password.',Login.feedback); 
     Login.pass.focus().select(); 
     return false; 
    } 

    Camo.AJAXStart('Logging in...'); 
    postData = 
    { 
     user:Login.user.val(), 
     pass:Login.pass.val() 
    } 

    Camo.AJAXPost('index/login/',Login.Success,Login.Failure,postData); 
    return false; 
} 

live_site_link click處理:

$('#live_site_link').click(function() 
{ 
    window.location.href = './'; 
}); 

事實上,處理程序的登錄表單(兩者KEYUP和login.js線22a分配上的Go按鈕的點擊nd 24分別)有時會在頁面重新加載後運行,這很奇怪。

在IE7 /兼容模式下,KEYUP並單擊處理程序login_submit正常工作,頁面沒有加載。在我測試的所有其他瀏覽器中也是如此。

什麼是IE9在做什麼?

+0

這不是發生了什麼事情。提交功能沒有在IE9中停止。我不知道Login.Submit在CAMO CMS方面做了什麼,但是我敢打賭,如果你捕獲事件函數(event),並使用event.preventDefault();它很可能會解決你的問題。 – Ohgodwhy 2012-03-06 04:01:02

+0

如果你仔細觀察,沒有提交功能被停止......沒有提交表單標籤。在live_site_link的common.js點擊處理程序上放置一個斷點,您會看到它正在觸發。僅限IE9。 – Rimer 2012-03-06 04:06:07

+0

使用$(「#login_user」)發佈一些代碼,您一直在嘗試使用 – Rafay 2012-03-06 04:15:32

回答

0

唯一的「修復」這個我能想出短期改變主網站鏈接按鈕到正規的錨標記實際上是將登錄字段和按鈕包含在表單標記中。

顯然沒有那些封閉的表單標籤,IE9正在使用live_site_link按鈕而不是GO按鈕在輸入上的按鍵處理程序和登錄的Go按鈕上的點擊處理程序之前按下自然輸入按鍵時提交表單表單有機會觸發,這會導致頁面重新加載(因爲這是live_site_link的點擊處理程序所做的)。

現在我必須處理沒有AJAX的登錄...

0

嘗試調用e.preventDefault()e.stopPropagation()Login.SubmitOnEnter

這將是更好不過如果你纏着你的窗體元素返回false之前,然後貼的形式提交事件。這樣,它仍然可以在沒有JavaScript的情況下工作,並且您不必爲點擊而輸入單獨的事件並輸入新聞。

+0

感謝您的回答。該函數在live_site_link click處理程序運行之後才運行。在common.js中放置一個斷點並親自查看...它將通過#live_site_link的點擊處理程序重定向到./,它不在登錄表單附近......此外,該站點將嚴重依賴ajax,因此規則的形式,而不錯,是沒有意義的。 – Rimer 2012-03-06 04:06:52

+0

在這種情況下,我肯定會建議更改爲使用提交作爲@charlietfl也建議,即使您的表單將只使用ajax。 – 2012-03-06 04:09:18

+0

這會阻止錯誤的點擊處理程序?一個完全不同的點擊處理程序觸發的情況比預期的要多。這是這裏的問題,不是缺少一個HTML表單... – Rimer 2012-03-06 04:11:32

-1

您可能會通過使用提交處理程序,而不需要捕捉回車鍵,使其點擊提交按鈕管理登錄提交過程更容易。好像額外的代碼來解決做一個簡單的方法

$('form').submit(function(){ 
    var valid=someValidionFunction(); 

    return valid; 
}) 

編輯由於沒有AJAX

+0

有沒有可以提交的表單!我也發現,當應用程序如此嚴重依賴ajax時,它必須同時處理ajax表單提交和自然的HTML表單提交,這將使常規的HTML表單支持模擬程序變得非常痛苦和「額外的工作」 ... – Rimer 2012-03-06 04:10:08

+0

但您使用的是用於表單的字段集。我懷疑IE期望它是這樣的形式 – charlietfl 2012-03-06 04:19:03

+0

好了,但無論如何,爲什麼對在頁面的左上角點擊一個按鈕處理程序被按下時,理應無關的字段集輸入字段中輸入觸發? – Rimer 2012-03-06 04:23:25