2016-12-27 105 views
0

我已經寫了兩個腳本一個用於輸入按鈕單擊和一個用於更改,但兩個事件都是正在觸發,我想如果通過按鍵/ keydown /按鍵/粘貼點擊輸入按鈕然後更改不應該作爲以及在keyup/keydown/keypress /粘貼上只有一個事件應該觸發。jquery應該只觸發一個事件

$('#txtName').on('keypress keyup paste', function (e) { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode === 13) { 
     AddName($('#txtName').val()); 
    } 
}); 

$('#txtName').on({ 
    change: function() { AddName($('#txtName').val()); } 
}); 
+0

'keypress'和'keyup'都觸發(在不同階段)的單按鍵行程。你在期待什麼? – George

+0

在輸入按鍵或鍵盤上,按下火或點火按鈕,如果點擊輸入,則更改事件不應觸發 – Rocky

回答

1

原因您正在使用兩個事件與鍵監聽器。只需使用其中的一個keypresskeyup事件。

並添加一個event.preventDefault();停止事件它不會觸發change事件。

$('#txtName').on('keyup paste', function (e) { 
 
    var keyCode = e.keyCode || e.which; 
 
    if (keyCode === 13) { 
 
     e.preventDefault(); 
 
     AddName($('#txtName').val(),e); 
 
     
 
    } 
 
}); 
 

 
$('#txtName').on({ 
 
    change: function (e) { AddName($('#txtName').val(),e); } 
 
}); 
 

 
function AddName(value,e) 
 
{ 
 
    console.log(e.type+ " - "+value); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="txtName">

0

當用戶按下一個按鍵,keyup事件是火按鍵事件火的時候用戶釋放鍵(按下後)。因此,如果您想一次觸發一個事件,您應該使用按鍵或鍵盤輸入。

1

如果#txtName這裏是一個輸入框,那麼change事件被推遲到元素失去焦點並且如果該值已經從先前狀態改變時將被觸發。

對於你的要求,你可以結合上jquery.on所有事件並在處理程序本身添加你的邏輯:

$('#txtName').on('keypress keyup paste change', function (e) { 
    var keyCode = e.keyCode || e.which; 
    if (e.type == "change") { 
     AddName($('#txtName').val()); 
    } 
    else if (keyCode === 13) { 
     AddName($('#txtName').val()); 
    } 
}); 

function AddName() { 
    // Your code here 
}