[英]React event.preventDefault() from onChange submission does not prevent refreshing
[英]Why does formatting an input field prevent onChange event from occurring
我有一些基本上像下面的代碼
.on("keyup", "input", function (e) {
this.value = utils.formatNumber(this.value);
})
.on("change", "input", function(e) {
expensiveFunctionThatUpdatesView();
})
照原樣,這些值會按照用戶類型正確設置格式,但是當用戶在輸入字段中跳格或單擊時,不會觸發onChange事件(因此不會更新視圖)。 如果我注釋掉keyup事件處理程序函數的主體,則所有內容都會按預期工作(格式設置除外)。 為什么會這樣呢?
AFAIK,觸發onchange事件需要滿足兩個條件 :
順便說一句,我嘗試將代碼更改為“模糊”,但是如果我格式化該字段,也不會觸發該代碼。 在測試時使用Chrome。
通過javascript(或jQuery通過val()
/ text()
)設置文本框值將永遠不會觸發瀏覽器更改事件。 您需要保存原始值,將其與后格式值進行比較,然后以編程方式觸發更改:
.on("keyup", "input", function (e) {
var originalValue = this.value;
var newValue = utils.formatNumber(originalValue);
this.value = newValue;
if (originalValue !== newValue) {
$(this).trigger('change');
}
})
您可以為兩個事件觸發相同的回調函數以啟用數字格式設置:
.on( 'keyup change', 'input', function ( e ) {
this.value = utils.formatNumber( this.value );
updateView();
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.