如標題,想請問貼上複製的文字貼到input[type=text]中,為甚麼無法用一般的清除文字框的方式清掉貼上的文字?
$("#test").on('paste',function (e) {
let PasteTxt=e.originalEvent.clipboardData.getData('text');
console.log(PasteTxt);//有值
$(this).val("")//無法清除
console.log($(this).val());
});
額外想問,雖然我可以在input看到文字但為甚麼無法再JQ中抓到VALUE?請問這個是跟複製貼上與實際在INPUT中輸入的機制有不同嗎?謝謝各位解惑
https://jsfiddle.net/gkxzny19/14/
$('#test').on('paste', function (e) {
// prevent paste action
e.preventDefault();
let PasteTxt=e.originalEvent.clipboardData.getData('text');
$('#test').val('').val(PasteTxt)
});
您好~謝謝你的回答我覺得我好像沒說清楚,我想在貼上後執行比對的程序,比對完成後會清空INPUT中的文字,這樣要如何清除?因為我有試過
$('#test').val('')還是無法清除文字框的內容
$('#test').on('paste', function (e) {
// prevent paste action
e.preventDefault();
let PasteTxt = e.originalEvent.clipboardData.getData('text');
if (condition === false) {
$('#test').val('')
}
else {
$('#test').val(PasteTxt)
}
});
加一行 e.preventDefault();
$("#test").on('paste',function (e) {
e.preventDefault();
let PasteTxt=e.originalEvent.clipboardData.getData('text');
console.log(PasteTxt);//有值
$(this).val("")// 可以清除
console.log($(this).val());
});
加 e.preventDefault();
拿掉 $(this).val("")
還是沒值哦他只是阻止貼上而已
謝謝J大~能請問為甚麼加上防止預設的動作就可以正常執行
listennn08沒值剛好可以達到我要的功能~~謝謝各位解惑
有值哦,底下的JSFiddle有測試出來,抓完值再清除,正常哦!
因為paste還會有後續工作,像是鍵盤的onkeyup, onkeypress,如果你不中止後面的工作,input會是鎖定變更狀態
japhenchen
對的~這樣是正常的~
了解~~謝謝解惑
哪裡有值?
第一個 console 是 clipboardData 的值
paste 也要等 keyup 值才會出現 這也是為什麼他沒辦法清除的原因
listennn08
它要的效果應該是貼上後,條件不符,需要用$(this).val("")清空值
通靈亡
這樣用 e.preventDefault 確定條件符合也能貼上嗎?
你那樣寫是可以啦XD
但是 e.preventDefault 的用法的確就是阻止預設動作