如何从“事件改变”元素中捕获事件?

时间:2014-03-02 12:00:50

标签: javascript jquery html textarea

我有两个<textarea></textarea>和一个<div></div>

如果我更改了#first textarea中的文字,则会在#second textarea中复制此文字。我如何捕捉事件,如果#second textarea中的文字发生变化,我会更改div #needle中的文字?哪个活动?

事件change keyup paste input propertychange不起作用..

我不想在第一次活动中使用强制性事件$('#second').change()

<textarea id="first"></textarea>
<textarea id="second"></textarea>
<div id="needle"></div>

<script>
    $('#first').keyup(function(){
         $('#second').val($(this).val());   
    });

    $(document).on('change keyup paste input propertychange', '#second', function(){
        $('#needle').text($(this).val());
    });
</script>

JSFiddle

4 个答案:

答案 0 :(得分:1)

input事件就足够了。

我建议你创建一个像changeText这样的函数,即使在第二个文本区域中触发input时也会调用它,当你更新其中的文本时。

$('#first').on("input", function(){
    changeText.call(
      $('#second').val( // <- You update the second textarea value
         $(this).val()  //    with the text from the first textarea
      )                 // <- This will return the second textarea jQuery object
    );
});

$(document).on('input', '#second', changeText);

function changeText() {
    // here `this` will be the second textarea jQuery object 
    $('#needle').text($(this).val());
}

JSFIDDLE

答案 1 :(得分:0)

你应该使用“改变”事件:

$('#second').on('change', function(){
 $('needle').append($(this).val()); // this appends the value 
});

请注意,我们使用的是append()方法。如果我们使用html()text(),我们会在每个更改事件上覆盖#needle值,这可能看起来很奇怪和不正常(并且可能无法使用)。

答案 2 :(得分:0)

您可以使用命名函数而不是使用匿名函数。

function onChangeSecond()
{
 $('#needle').text($(this).val());
} 

你可以在第一和第二个Textarea的keyUp事件中使用onChageSecond()。

答案 3 :(得分:0)

此事件在jquery中未创建..