2012-08-13 73 views
3

我有輸入欄的列表。其中一些是隻讀字段。 我正在使用.keyup()事件來觸發輸入字段中的某些內容發生變化。 但它不會影響只讀字段。 不知何故,我想改變這些領域。 有什麼幫助嗎?.keyup或.change事件觸發在jquery只讀字段?

+0

_「不知怎的,我想改變那些領域也「__ - 嗯?你問如何改變JS只讀字段的值?或者問一個只讀字段被JS更改時是否有辦法自動觸發事件? – nnnnnn 2012-08-13 06:25:19

+0

問:有沒有辦法在js更改只讀字段時自動觸發事件? – SSS 2012-08-13 08:45:01

回答

9

如果您在只讀輸入字段中調用focus,則keyup事件失火。但是,輸入該字段將不會更改其值(因爲它是隻讀的)。也許你需要的是傾聽其value屬性中的更改嗎?

我建議聽inputpropertyChangethis answer建議:

$('input').bind('input propertychange', function() { 
    // Do something 
}); 

這樣的時候,你會被告知您的輸入值發生變化( 從任何手段 )。 編輯:如果以編程方式更改值,則不起作用 - 對於這種情況,唯一跨瀏覽器可行的備選項涉及輪詢(例如this)。一個更好的選擇可以使用一個框架,如knockout.js,它可以爲你自動化,同時在視圖和模型之間提供清晰的分離。這裏是an example


更新:我記得讀您的評論中已刪除的回答,說明你編程設置輸入的值,是正確的? (可以使用10k代表一些用戶恢復它?)在這種情況下,爲什麼不改變值直接觸發監聽器的代碼?

$(link).click(function() { 
    $(readonlyInput) 
     .val("some val") // Update the value 
     .trigger('keyup'); // Trigger the listener 
}); 
+0

是否也適用於dateselector字段?在哪個選項中,爲只讀字段選擇新的日期值更改? – SSS 2012-08-13 06:06:29

+0

正如我在我的編輯中所說的那樣,這個解決方案在您以編程方式更改該值時不起作用(當該字段不是隻讀時,它**工作,即使對於'type =「date」',當您選擇日期圖形選擇器)。但是用knockout.js很容易,[這裏是一個例子](http://jsfiddle.net/H68Sb/)(這個特殊情況根本不需要jQuery,但是通常很容易將兩個框架結合在一起頁面如有必要)。對不起,如果沒有回答你的問題,但我真的不知道除了輪詢輸入值還有什麼辦法...或者只是直接調用監聽器... – mgibsonbr 2012-08-13 07:11:51

+0

非常感謝你:)它工作正常.. @mgibsonbr – SSS 2012-08-13 09:07:27

1

看來只讀字段不聽這意味着輸入類似「輸入」,「KEYUP」等活動,如果你認爲這是一個合乎邏輯的行爲,他們仍然聽變化事件,那麼爲什麼不使用「平變化」它,而不是輸入事件,使用jQuery是相當容易: 爲

$("input").filter(function(){ 
     return $(this).prop("readonly");  
}).on("change", function(){ 
     // do something 
}); 

而對於輸入其餘是不是隻讀

$("input").filter(function(){ 
     return !$(this).prop("readonly");  
}).on("keyup", function(){ 
     // do the same thing something 
}); 
相關問題