0

我有一个文本区域,需要一个最小长度的字符串来启用按钮。我正在使用 jQuery 验证器插件,一切正常,直到我到达 char 10。此时,最少字符数的消息消失了,但按钮仍然被禁用。我必须输入另一个字符(现在是 11)才能启用按钮。删除字符时的功能也不正确。该按钮保持启用状态,直到只剩下 8 个字符。此时按钮被禁用。我不确定它发生了什么。任何帮助,将不胜感激。

这是html:

<textarea id="otherBox" cols="50" class="required" minlength="10"></textarea>
<input type="button" id="sButton" value="Cancel e-Bill" disabled="true" >

javascript:

var goodLenth = false; 
$(document).ready(function(){
    var validator = $("#my_form").validate();


    $("#otherBox").keypress(function(){
        goodLength = validator.element("#otherBox");
        if(goodLenth){
            $("#sButton").removeAttr("disabled");
        }
        else{
            $("#sButton").attr("disabled","true");
        }
   });
});

这是它的实际操作http://jsfiddle.net/mg2Bv/

4

2 回答 2

1

只需使用插件的内置回调事件函数...然后您不必尝试在外部匹配事件。它更简洁、更高效且更易于维护。

success:- 成功验证元素时的回调函数。

highlight:- 元素验证失败时的回调函数。

$(document).ready(function () {
    $("#my_form").validate({
        success: function(label) {
            $("#sButton").prop("disabled", false);
        },
        highlight: function(element, errorClass) {
            $("#sButton").prop("disabled", true);
        }
    });
});

工作演示:

http://jsfiddle.net/Ufx9G/

文档:

http://docs.jquery.com/Plugins/Validation/validate#toptions

笔记:

1) 不应使用removeAttr(),因为它会永久删除attribute.

2)此外,应该使用prop()而不是attr()技术上disabled的 aproperty而不是 a attribute

见: http ://api.jquery.com/prop/

.prop()应该使用方法来设置和disabledchecked不是.attr()方法。

于 2013-01-19T16:24:51.293 回答
0

尝试这个....

不要使用keyPress,这不会抓住擦除键......

使用 keyUp...

$(document).ready(function(){
    var validator = $("#my_form").validate();


    $("#otherBox").keyup(function(){
        goodLength = validator.element("#otherBox");
        if(goodLenth){
            $("#sButton").removeAttr("disabled");
        }
        else{
            $("#sButton").attr("disabled","true");
        }
   });
});

看这个演示

问候。

于 2013-01-19T16:30:20.867 回答