2011-07-29 27 views

回答

9

我想,這是因爲在關閉對話框(警告框)之後,焦點返回到文本框,因此該函數將再次觸發。

+0

嗯感謝您的答案。看到這裏爲我的真正問題http://stackoverflow.com/questions/6869717/google-chrome-infinite-loops-and-selecting-text – ajbeaven

+0

對於其他人看這個,如果你正在調試,使用'console.log'而不是顯示一個警報模式,因爲這將解決我上面遇到的問題。 – ajbeaven

5

我認爲這是因爲每次單擊警報的「確定」按鈕時,瀏覽器都會將焦點從警報發送到文本字段。您可能不會在代碼的最終版本中彈出警報(methinks),所以從長遠來看,這可能不是問題。

+2

+1也代替警告我經常在頁面(有時也會被絕對值)上添加額外的div和只添加到郵件那個div。例如'$(「#myMessageDiv」)。append(messageString +「
」);' –

+1

我做的是完全相同的事情 - 在開發時比警報侵入性更小:) – Pwninstein

+2

我更喜歡console.log,它可以處理任何類型。 – Wylie

2

問題是,alert()是從輸入框中竊取焦點,然後在對話框關閉時恢復焦點。您可以通過在顯示警報之前清除輸入框中的焦點來解決此問題。

例子:http://jsfiddle.net/XppG9/6/

+0

我認爲這不能解決他的問題,每次他專注於文本框時,用戶都會得到提示,然後他會迴應。用戶可能會再次進入文本框進行輸入,系統會再次出現提示。 – dpp

+0

@domanokz - 正確,這只是消除了無限循環。它沒有做任何事情來消除由於出現焦點時彈出警報而導致的可用性問題。 – aroth

1

發生這種情況,因爲它是將焦點設置迴文本框。 試試這個應該在Chrome

$('input[type="text"]').live('focus', function(event) { 
    alert('in'); 
    $(this).blur(); 
}); 
0

做工精細由於警報獲得焦點從你的文本框,並在關閉警告對話框中,重點回來。如果你做你的函數中的任何非調焦機構,將觸發一次:http://jsfiddle.net/G8CmV/

<input type="text" /> 
<div id='tester'>Test:</div> 



$('input[type="text"]').live('focus', function(event) { 
    $('#tester').html($('#tester').html() + "_*"); 
    });