jQuery和textarea更改事件

时间:2013-01-16 22:13:10

标签: javascript jquery

我刚刚遇到了一个奇怪的行为jQuery,无法弄清楚任何或多或少的轻微解决方案。 说,我有textarea和按钮。如果textarea为空,我想禁用按钮。 为此,我有一个处理器来完成这项工作。

以下是代码:

// textarea control
var $textarea = $('#myTextarea');
var $button = $('#myButton');
$textarea.on('input propertychange', function() {
    if($textarea.val().length > 0) {
        $button.removeClass('disabled').removeAttr('disabled');
    } else {
        $button.addClass('disabled').attr('disabled', 'disabled');
    }
});
$button.on('click', function() {
    if ($button.attr("disabled") != null) {
        console.log('Disabled!');
        return false;
    } else {
        // do some stuff and eventually erase textarea 
        $textarea.val('');
    }
});

我的麻烦是当我擦除textarea(代码的结尾)时它不会禁用该按钮。任何想法都会受到赞赏(实际上它是对我的代码的略微调整,但情况反映非常好,希望对你来说很明显,谢谢!)

UPD stackoverflow上没有找到任何帮助。

UPD2 正如我在开始时说的那样,我一直在寻找不像强制触发事件那样的解决方法,我认为有可能抓住$textarea.val();发起的任何事件当然@Madbreaks和@epascarello的解决方案工作得非常好,谢谢你们。 / p>

4 个答案:

答案 0 :(得分:3)

问题是使用JavaScript设置值通常不会触发事件,但您可以自己动手。

$textarea.val('').trigger("input");

答案 1 :(得分:3)

也许只需添加:

else {
    // do some stuff and eventually erase textarea 
    $textarea.val('');
    // notify
    $textarea.trigger('propertychange');
}

答案 2 :(得分:0)

确保修剪textarea的值,并在获得.val()的长度时没有空格。如果您使用像ckEditor这样的文本编辑器,请确保阅读有关如何检索正在写入的文本的文档。

答案 3 :(得分:0)

推荐使用这个jQueryTextChange lib。它是一个跨浏览器一致的。主页上明确阐述了用法。 http://zurb.com/playground/jquery-text-change-custom-event