Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法捕获对文本区域的更改?_Javascript_Jquery - Fatal编程技术网

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());
});​