2009-10-26 90 views
0

我需要觸發輸入更改事件,但前提是該值發生更改。我需要從鍵盤事件中完成。有沒有一種方法可以調用瀏覽器的更改機制,它將觸發更改事件觸發,或者不取決於值是否被修改?模糊輸入更改事件

例子:

User clicks on an input field 
User does not modify value of the field 
user presses a key causing the input field to blue 
onchange does not get triggered. 

VS

User clicks on an input field 
User modifies the value of the field 
user presses a key causing the input field to blue 
onchange gets triggered.  

這可能嗎?或者我需要執行onfocus保存值,onblur比較,並可能調用onchange,但前提是沒有調用onchange,因爲用戶只是通過點擊vs指向鍵盤觸發器而導航。

回答

1

它的關鍵是什麼?如果該鍵不是標準輸入鍵,則設置onchange以檢查該字段是否改變字段。

你也可以綁定一個onkeypress做文件,並返回:false;當按下將輸入更改爲藍色的按鍵時。

多一點情況可以幫助。

+0

基本上,當我按下輸入字段上的輸入時,我通過關注下一個輸入字段來模擬Tab鍵按下(不要辯論這個問題)。不過,如果輸入元素更改值,我需要更改處理程序。只專注於下一個字段不會調用瀏覽器的內置更改機制。 對下一個字段使用jQuery.focus()或對當前使用.blur()不觸發更改處理。我需要手動調用.change(),但我不希望在值未更改時發生這種情況,並且我不希望在用戶單擊另一個字段以調用它時調用兩次。 – 2009-10-26 22:43:16

+1

您是否嘗試過該領域本身的onchange處理程序 - http://www.w3.org/TR/html401/interact/scripts.html#adef-onchange? – Cebjyre 2009-10-26 23:23:10

+0

我正在使用jQuery 1.2.6進行事件處理。我會進一步嘗試。 – 2009-10-27 14:19:49

1

如果我得到你的權利,你需要兩個變量記住輸入的過去和當前狀態,以及監聽器來處理互動:

<html> 
<head> 
<script language="javascript"> 
var startFieldValue = "Some value, possibly value of input when it is loaded"; 
var endFieldValue = ""; 
var focusFlag = 0; 
function interact(keyEvent) { 
    if(focusFlag == 1) 
     return true; 
    var key = keyEvent.keyCode? keyEvent.keyCode : keyEvent.charCode 
    if(String.fromCharCode(key) == "a") { 
     if(startFieldValue != endFieldValue) { 
      var elem = document.getElementById('input-to-be-changed'); 
      elem.style.backgroundColor = "blue"; 
      startFieldValue = endFieldValue; 
     } 
    } 
} 
</script> 
</head> 
<body onkeypress="interact(event);"> 
<input id="input-to-be-changed" onchange="endFieldValue = document.getElementById('input-to-be-changed').value;" onfocus="focusFlag = 1;" onblur="focusFlag = 0;"> 
</body> 

剛閱讀以前的帖子的評論,你應該有全球儘管如此,但是發生了什麼的想法。更改將刪除檢查焦點,並將列表程序(onkeypress)放入每個輸入內。函數交互應該採用2個值 - 輸入的事件和ID以便下一個焦點。另外聚焦新的元素應該改變startFieldValue。對不起,不寫代碼本身,但它有點晚,我真的需要一些睡眠。

+0

我的問題是:我可以輕鬆記住以前的焦點值,然後再次檢查模糊的值,如果更改手動調用更改事件。不過,我需要確保由鼠標交互引起的模糊觸發的常規更改事件不會導致2次更改事件觸發。 – 2009-10-27 14:15:44

+0

我猜想在用鍵盤模糊輸入之後(輸入引起下一個輸入的焦點),onblur將不會再被觸發。只需使用onkeypress進行聆聽,然後讓onblur不做任何事情,將其留空。如果您需要在常規鼠標單擊其他輸入時使用相同的交互方式,那麼您只需使用這兩個變量來計算字段值。完成交互事件後,腳本將startFieldValue更改爲EndFieldValue。如果它們是相同的,即沒有任何改變或功能已完成該輸入剛纔,代碼將不會觸發(它的行「if(startFieldValue!= EndFieldValue){「 – 2009-10-27 14:41:55

-3

不要使用jQuery blur()和focus()方法,而是使用原始Javascript。例如:jQuery(selector)[0] .blur(); 就我而言,jQuery的方法僅適用於Opera瀏覽器。

+1

jQuery是爲了讓開發人員不必擔心瀏覽器的怪異,所以它應該適用於所有的瀏覽器,所以不知道你來自哪裏? – Skuld 2012-02-13 15:42:00