如果我在table1上使用ctrl c和ctrl v粘贴文本(例如在“Apple”上),则table2上输入的重复文本仍会更改,但如果我使用右键单击并粘贴,则表2上的重复输入不会更改。 :(我已经创建了两个不同的事件(键盘和更改)但是当使用右键单击粘贴文本时似乎没有任何工作。请参阅下面:
$(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');
});
});
});
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);
}
});
});
}
答案 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'/>
答案 2 :(得分:0)
好的,如果用户使用Ctrl + V等,这将检测到你,但就是这样。如果他们右键单击并粘贴,那么您将需要另一个表达式来捕获它。我使用keydown
和keyup
将其保留为开放状态,以便您可以根据需要捕获更多变体。
这是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