2015-10-16 77 views
0

我有以下jQuery綁定來偵聽某些文本輸入元素中的粘貼操作。函數內部是否有方法來獲取觸發事件的實際元素的引用?我的目標是清除輸入中的文本,如果內部粘貼了任何內容,但'這'似乎不正確。Jquery綁定到多個元素

編輯,代碼已被更新:

$(window).on("load", function() { 
     $('.watchable').bind("paste", function() { 
      alert('called!'); 
      $(this).val(''); 
     }); 
    }); 

我使用JQuery 1.11.3。我看到警報,但文字未清除。

這是一個jsFiddle演示。將任何文本粘貼到2個文本字段中的任一個中,即警報顯示,但文本字段中的文本不會被清除。

https://jsfiddle.net/8bep1Lxh/

+1

'$(本).VAL( '');' – Tushar

+0

FYI如jQuery的1.7,在'。對(中)'方法是將事件處理程序附加到文檔的首選方法。 – j08691

+0

我已驗證該事件是由警報觸發的,但文本仍未清除。 – user1154644

回答

1

更新

如果您想總是清場時粘貼嘗試,然後請參閱下面的更新例子:

我的小提琴 - https://jsfiddle.net/8v08n4vx/

Your Fiddle - https://jsfiddle.net/jmap4jhy/

它們阻止默認粘貼事件,除非該字段已爲空。

如果您想完全防止它,只需刪除if ($(this).val() !== ""){聲明。

我的小提琴 - https://jsfiddle.net/7Lsr7j78/

你的小提琴 - https://jsfiddle.net/pzb9s7s4/

(但是,你應該想想操縱普遍存在的粘貼事件可能對用戶體驗可能產生的負面影響

$('.watchable').on('paste', function (e) { 

    //if field is not empty 
    if ($(this).val() !== "") { 

    // prevent default paste event 
    e.preventDefault(); 
    // and clear field 
    $(this).val(''); 

    } 

}); 

鑑於您使用的jQuery版本大於1.7,您應該使用on而不是bind

我的小提琴 - https://jsfiddle.net/ae8ufz7y/

更新後的小提琴 - https://jsfiddle.net/83263j4e/

你只需要添加下面的JavaScript:

$('.watchable').on('paste', function() { 
    // on paste, clear input 
    $(this).val(''); 
}); 

這裏是關於on方法jQuery的文檔: http://api.jquery.com/on/

+0

該示例似乎不起作用 – user1154644

+0

@ user1154644 - 它對我來說工作正常。什麼不起作用?如果您將某些東西粘貼到文本字段中,則當前文本將消失,並且只有新文本存在。這是不是爲你發生,或者我誤解了你的要求? –

+0

@ user1154644 - 另外,哪一個不工作...我的小提琴或你的一個(或兩者)?謝謝。 –

0

更好,我認爲是禁用粘貼事件,而不是清除出來的文字

$('.some-el').on('paste', function() { 
    return false; 
}); 

上的粘貼事件輸入的數值不能被捕獲(和修改),因爲異步地「粘貼輸入變化'事件。

只是下一個事件可以粘貼事件後捕獲輸入的值

$('.some-el').on('input', function() {});