如何使用右键单击检测文本是否粘贴

时间:2015-01-28 02:31:23

标签: javascript jquery html css

如果我在table1上使用ctrl c和ctrl v粘贴文本(例如在“Apple”上),则table2上输入的重复文本仍会更改,但如果我使用右键单击并粘贴,则表2上的重复输入不会更改。 :(我已经创建了两个不同的事件(键盘和更改)但是当使用右键单击粘贴文本时似乎没有任何工作。请参阅下面:

Keypress fiddle demo

$(document).off('keydown').on('keydown', $('#table1 tbody tr td input:eq(0)'), function (e) {
var oldValue =$(e.target).val();//get the input value before keypress or edit
    $(document).on('keyup', $('#table1 tbody tr td input'),function(e){ 
        $('#table2').find('td input').each(function(){
            if($(this).val() === oldValue){
                $(this).val($(e.target).val());
            }
        $(document).off('keyup');
        });
    });              
});

on change fiddle demo

var oldValue;
$(document).on('keydown', '.main', function (e) {
    oldValue = $(this).val();
    foo(oldValue);
});
var newValue;
$(document).on('keyup', '.main', function (e) {
    newValue = $(this).val();
    foo(oldValue);
});
function foo(oldValue) {
    $('#table1').find('tbody tr').find('td input').change(function (i) {
        var orig = $(this).val();

        $('#table2 tbody tr').find('td input').each(function (i) {
            if (oldValue == $(this).val()) {
                $(this).val(orig);
            }
        });
    });
}

3 个答案:

答案 0 :(得分:2)

您可以计算字符onChange(因为您一次只能输入一个字符。

修改:

为什么它没有工作:

在你的jsfiddle上记得在框架中设置onDomReady&相当于$(document).ready(handlerFn)

的扩展名

在输入上使用on('change', handlerFn).change(handlerFn)时,只有在文本框失去焦点(blur)后才会触发。当您在表单上使用select时,响应不是即时的。使用bind("input", handlerFn)代替on(change)作为输入。

下面的代码将更新#table2上正在编辑的#table1上的匹配单词。更新将适用于复制粘贴CTRL C / V或鼠标复制/粘贴事件。如果用户通过比较旧值和新值的长度来复制/粘贴,它也会发出警报。

$("#table1 >* input").each(function() {
    var elem = $(this),
    oldValue;

    elem.on('focus', function () {
        elem.data('oldVal', elem.val());
        elem.data('oldLen', elem.data('oldVal').length);
    });

    // Look for changes in the value, 
    // bind 'input' event to the textbox to fire the function
    // every time the input changes (paste, delete, type etc.)
    elem.bind("input", function(event){
        oldValue = elem.data('oldVal');
        // update oldVal
        elem.data('oldVal', elem.val());
        // check if pasted
        if (elem.val().length - elem.data('oldLen') > 1 ) {
            alert('Most certainly pasted');
        }
        // update input value length
        elem.data('oldLen', elem.data('oldVal').length);

        // update #table2
       foo(oldValue, elem.val()) ;
    });
});

更新#table2的功能

function foo(oldValue, newValue) {
    $('#table2')
      .find('input')
      .each(function (i) {
          if (oldValue === $(this).val()) {
              $(this).val(newValue);
          }
      });
}

这里有jsfiddle供你玩

答案 1 :(得分:1)

检查此代码,希望这会对您有所帮助:

jQuery('#some_text_box').on('input propertychange paste', function() {
    var text1 = $('#some_text_box').val();
    //alert(text1);

    $('#tab2').val(text1);

});

这是您的第一个文本框#some_text_box

<input type='text' value = "Apple" id='some_text_box' />

这是表2文本框#tab2

<input type='text' value="Apple" id='tab2'/>

JSFiddle

答案 2 :(得分:0)

好的,如果用户使用Ctrl + V等,这将检测到你,但就是这样。如果他们右键单击并粘贴,那么您将需要另一个表达式来捕获它。我使用keydownkeyup将其保留为开放状态,以便您可以根据需要捕获更多变体。

这是jQuery所以你需要这个库来覆盖它。

$(document).ready(function()
{
    var ctrlDown = false;
    var ctrlKey = 17, vKey = 86, cKey = 67;

    $(document).keydown(function(e)
    {
        if (e.keyCode == ctrlKey) ctrlDown = true;
    }).keyup(function(e)
    {
        if (e.keyCode == ctrlKey) ctrlDown = false;
    });

    $("#no-copy-paste").keydown(function(e)
    {
        if (ctrlDown && (e.keyCode == vKey || e.keyCode == cKey)) return false;
    });
});

这是一篇关于处理程序的文章,也可能对你有所帮助。 http://unixpapa.com/js/key.html

-Epik