2015-10-16 79 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() {});