我刚刚遇到了一个奇怪的行为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>
答案 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