Javascript 有没有办法捕获对文本区域的更改?
这就是我现在正在处理的问题Javascript 有没有办法捕获对文本区域的更改?,javascript,jquery,Javascript,Jquery,这就是我现在正在处理的问题 $("#text").on("input", function(event){ console.log("The changes are:" + SomeDataThatIDontKnowHowToAccess); }); 我意识到这可能会因为退格/粘贴文本/插入/删除而中断。我真的不知道如何处理,可能有删除/插入/覆盖事件。。。我不想提出我自己的解决方案 示例 用户将某物粘贴到空白文本区域中 {eventType:'insert',value:'som
$("#text").on("input", function(event){
console.log("The changes are:" + SomeDataThatIDontKnowHowToAccess);
});
我意识到这可能会因为退格/粘贴文本/插入/删除而中断。我真的不知道如何处理,可能有删除/插入/覆盖事件。。。我不想提出我自己的解决方案
示例
用户将某物粘贴到空白文本区域中
{eventType:'insert',value:'something'}
显示在控制台中尝试此操作
//当textarea失去焦点时,可以使用此事件
$("#text").on("change", function(event){
console.log("The changes are:" + $(this).val() );
});
//此事件可用于用户开始键入并显示密钥
$("#text").on("keyup", function(event){
console.log("The changes are:" + $(this).val() );
});
//
//尝试改用更改事件。如果需要获取当前值,则需要使用keyup事件
$("#text").on("keyup ", function(event){
console.log("The changes are:" + $(this).val() );
});
将旧值写到某个你可以坚持关注的地方。然后,您可以在change
事件中使用自己的逻辑来查找新旧值之间的差异
$('#text').on('focus', function () {
//THIS LINE IS INCORRECT [what was wrong with my fiddle]... assignment is parameter *doh*
//$(this).data('oldValue') = $(this).val();
//THIS IS THE CORRECT LINE
$(this).data('oldValue', $(this).val());
}).on('change', function() {
alert('Old Value: ' + $(this).data('oldValue') + '\nNew Value: ' + $(this).val());
});
为你拉小提琴:[修正]在这里你必须做两件事。首先,必须缓存最后一个值。这样,当新值出现时,您就可以与它进行比较了
其次,您需要查看(并下载)一个。您可以将diff的输出转换为div的html。结果看起来棒极了
然后,您的解决方案将如下所示:
$("#text").data('lastvalue', $("#text").val());
$("#text").on("input", function(event){
var diff = diffString($("#text").data('lastvalue'), $("#text").val());
$('#changesdiv').html("The changes are:" + diff);
$("#text").data('lastvalue', $("#text").val());
});
更新
我修复了脚本上的一些错误,并在
嗯,这个diffString
功能真是太棒了。随着用户的编辑而改变,或者当编辑完成并离开文本区域时?@j08691随着用户的编辑而改变。你可以尝试捕获所有按键并按x间隔显示更改。我不明白这个问题。您想知道更改完成之前和之后的文本吗?我认为您需要发布一个示例。@j霍洛曼,但这样您就得不到复制粘贴的值。这些不是更改,这是新值。我认为您的小提琴坏了,我始终得到未定义的旧值。@johnthexiii:的确如此。固定的。对不起that@BLSully这是一个非常好的功能。看看组装好的JSFIDLE,看看结果显示得有多好。
$("#text").data('lastvalue', $("#text").val());
$("#text").on("input", function(event){
var diff = diffString($("#text").data('lastvalue'), $("#text").val());
$('#changesdiv').html("The changes are:" + diff);
$("#text").data('lastvalue', $("#text").val());
});