jQuery函数绑定'输入属性change'不按预期射击

时间:2013-10-11 20:58:03

标签: javascript jquery function bind

我有jQuery代码调用函数:

$('#text_area').bind('input propertychange', function() {...

绑定到函数的元素是文本区域。当我输入和删除文本时,函数被调用得很好,但是当我选择所有文本时,无论是通过热键还是拖动鼠标,然后点击退格键都不会调用该函数。这是我无法调用函数的唯一实例。这是'input propertychange'事件的预期结果吗?如果是这样,我怎么能改变它按预期工作?请注意,这适用于Chrome,IE和Firefox。

3 个答案:

答案 0 :(得分:4)

这适合您的目的吗?

$('#text_area').on('keyup', function() {
    console.log('called');
});

小提琴:http://jsfiddle.net/KyleMuir/ruJZD/

此外,从jQuery 1.7开始.on()http://api.jquery.com/on/)是绑定事件的首选方式。

编辑:,因为有人在右键点击粘贴文字后,这是一个更新:

$('#text_area').on('keyup paste', function() {
    console.log('called');
});

小提琴:http://jsfiddle.net/KyleMuir/ruJZD/9/

答案 1 :(得分:2)

您需要在文本区域被清除时调用函数。或者您希望在将文本粘贴到文本区域时调用相同的函数。

您可以使用与问题中包含的相同的代码。我已经包含了一个带有这个答案的工作演示

 <textarea id='textarea1'>data</textarea>

// ....................

$("textarea").bind('input propertychange', function(){
  alert($(this).val());
});

注意:使用jquery插件

<强> DEMO

如果您想阻止同步触发,请使用以下代码

<textarea id="textarea"></textarea>

// .......

var text = "";
$("#textarea").on("change keyup paste", function() {
    var Val = $(this).val();
    if(Val == text) {
        return; //prevent multiple simultaneous triggers
    }

    text = Val;

    alert("changed!");
});

<强> DEMO1

'Note: Checked with chrome and firefox'

答案 2 :(得分:0)

.bind方法已弃用最新的3 j查询版本。 相反,我们可以使用.on来获得正确答案。

 <textarea id="anytextid"></textarea>
<div id="sethere"></div>

此更改的正确文字

$('#anytextid').on('input propertychange', function() {
    $('#sethere').html($(this).val().length );
});