如何根据文本框的特定条件禁用/启用按钮?

时间:2014-10-13 16:30:49

标签: jquery

我有以下HTML:

<td>
    <input type="text" id="txtID" maxlength="16" />
</td>
<td>
    <input type="button" value="Search" id="btnSearch" disabled="disabled"/>
</td>

#btnSearch

上的以下条件禁用/启用按钮#txtID
  1. 最小长度为6
  2. 允许数字,复制/粘贴
  3. 如果同时满足(1)和(2),并按下输入,则应单击#btnSearch
  4. 我有三个jQuery函数:

    $("#txtID").bind("propertychange keyup input paste", function () {
        var mid = $.trim(this.value);
        if (mid.length < 6) {
            $("#btnSearch").attr("disabled", true);
        }
        else {
            $("#btnSearch").removeAttr("disabled");
        }
    });
    
    myself._findjcontrol("txtID").keypress(function (event) {
        if (event.keycode == 13) {
            myself._findjcontrol("btnSearch").click();
            return false;
        }
    });
    
    $("#txtID").keydown(function (e) {
        if ($.inArray(e.keyCode, [46, 8, 9, 27, 13]) !== -1 ||
        (e.keyCode == 65 && e.ctrlKey === true) ||
        (e.keyCode >= 35 && e.keyCode <= 39)) {
            return;
        }
        if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
            e.preventDefault();
        }
    });
    

    如何将上述三个功能合并为一个?

1 个答案:

答案 0 :(得分:0)

由于您的第一个bind函数正在侦听多个事件,因此您可以通过一些小的修改来移动其中的另外两个函数:

  1. keyup更改为keypress(无论如何,这是首选)
  2. 在整个功能
  3. 中始终引用e而不是event
    $("#txtID").bind("propertychange keypress input paste", function (e) {
        var mid = $.trim(this.value);
    
        if (mid.length < 6) {
            $("#btnSearch").attr("disabled", true);
        }else {
            $("#btnSearch").removeAttr("disabled");
        }
    
        if (e.keycode == 13) {
            myself._findjcontrol("btnSearch").click();
            return false;
        }
    
        if ($.inArray(e.keyCode, [46, 8, 9, 27, 13]) !== -1 || (e.keyCode == 65 && e.ctrlKey === true) || (e.keyCode >= 35 && e.keyCode <= 39)) {
            return;
        }
    
        if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
            e.preventDefault();
        }
    });