1

我刚刚遇到了一个奇怪的行为 jQuery,无法找出任何或多或少的轻微解决方案。说,我有文本区域和按钮。如果 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();Sure @Madbreaks 和 @epascarello 的解决方案触发的任何事件,谢谢大家。

4

4 回答 4

3

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

$textarea.val('').trigger("input");
于 2013-01-16T22:14:38.057 回答
3

也许只是添加这个:

else {
    // do some stuff and eventually erase textarea 
    $textarea.val('');
    // notify
    $textarea.trigger('propertychange');
}
于 2013-01-16T22:14:58.257 回答
0

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

于 2013-01-16T22:17:49.570 回答
0

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

于 2014-05-15T23:25:30.850 回答