2010-01-05 60 views
1
$(document).ready(function() { 
$("input[id^='question']").live('keyup',function(ev){ 
    id=this.id.substr(8); 
    if (ajaxCallTimeoutID != null) 
    clearTimeout(ajaxCallTimeoutID); 
ajaxCallTimeoutID = setTimeout(function(){subjectivecheck(id)}, 1000); 
}); 
}); 

存在問題。當用戶將文本粘貼到輸入字段時,上面的函數不能被觸發。如何解決這個問題呢?當用戶在輸入字段中輸入文本或將文本粘貼到輸入字段時,如何激發javascript函數?

+0

只有當用戶停止輸入一段時間時才需要使用subjectivecheck()。 – Steven 2010-01-05 08:52:00

回答

1

onchange事件就是你想要的。它會在文本框失去焦點(模糊)時觸發,並且自收到焦點後已更改其值。它處理粘貼問題。

因此,代替.live('keyup',使用live('change'

這是一樣好,沒有使用一些荒謬的間隔輪詢。只是爲了上下文的目的,請注意,任何用戶都可以在瀏覽器中隨時關閉JavaScript。

+0

但是,如果用戶正在打字?我只想檢查用戶停止輸入時的值 – Steven 2010-01-07 04:36:22

+1

閱讀第二句。 – 2010-01-07 05:51:31

0

粘貼(onpaste)事件不是標準 - 它僅在Internet Explorer(參見:http://msdn.microsoft.com/en-us/library/ms536955(VS.85).aspx)是AFAIK支持

的變化(onchange handlder)事件是標準的 - 但是,這隻會火當值文本框在獲得和失去焦點之間的時間變化 - 低檢測到更改需要文本框失去焦點。

你可以做什麼,使用setInterval()http://www.w3schools.com/jsref/met_win_setinterval.asp)輪詢文本框的值,並將其與以前的值進行比較。

+0

我只想在用戶停止輸入時檢查用戶輸入。 – Steven 2010-01-05 08:50:49

+0

在這種情況下'onchange'可能是你想要的。 – 2010-01-05 09:13:28

+0

不,但如果文本框沒有失去焦點,但用戶停止鍵入會怎麼樣。例如,用戶停止鍵入,但輸入光標仍在文本框中? – Steven 2010-01-05 09:19:11

0

在字段上的onfocus事件中,您可以啓動計時器來檢查字段值是否已更改。

並在onblur,清除該計時器。

使用Ctrl + V粘貼可以使用onkeyup,但不能用鼠標右鍵單擊或使用瀏覽器撤消。

0

這不是唯一的問題。即使您可以在所有瀏覽器上可靠地捕捉剪切和粘貼,但您仍然可以在表單字段中添加更多內容。例如,在某些平臺上,將文件拖動到輸入將會放入路徑名,而不會捕獲任何事件。或者用戶可能會右鍵單擊 - 撤消更改內容。或刪除。或者從輸入或其他輸入中選擇一些文本,然後拖放它。可能還有很多我沒有想到的內容。

如果你想要的所有更改表單域快於onchange被告知,恐怕也沒有辦法,只好不斷地監測元素的value在輪詢setInterval

相關問題