-3

您好,我有一个函数,它在每个 keyup 事件中测试输入值的长度是否为 ==3,如果是,则调用另一个函数;

我的问题是我想在长度>3时停止执行这个jquery函数

$('#txtInput').bind('keyup', lil);

我试过解除绑定,但它不起作用;提前致谢

 var lil = function () 
             {
              var  strin = document.getElementById('txtInput').value;
              newstr = strin.replace(/[^\u0400-\u04FF0-9]/gi, '');
              alert (newstr);
              k = newstr.length;
             if (newstr.length==3)
             {triming();}



             }

$(function() 
{
     $('#txtInput').bind('keyup', lil);     

       /*if (k>3)
       $("txtInput").unbind("keyup", lil);  */ - this doesn't work



});
4

2 回答 2

2

而不是取消绑定事件,只需使用 return 语句来停止函数中代码的进一步执行。

if (k>3)  return;
于 2013-02-04T07:49:28.743 回答
0

主要问题是,当页面加载并且变量 k 仍然未定义时,您取消绑定事件处理程序的代码仅运行一次。每次 keyup 处理程序完成工作时,您都需要检查 k > 3:

var lil = function () 
{
    var  strin = document.getElementById('txtInput').value;
    var newstr = strin.replace(/[^\u0400-\u04FF0-9]/gi, '');
    alert (newstr);
    var k = newstr.length;
    if (k==3){
         triming();
    }
    if (k>3)
        $("txtInput").unbind("keyup", lil); 

$(function() 
{
    $('#txtInput').bind('keyup', lil);     
});

此外,您将函数 lil 绑定到 keyup 事件两次,第一次很可能是在浏览器解析文档之前。仅保留包装在(隐式)$(document).ready() 函数中的第二个绑定。

另请注意,我通过在它们前面加上“var”来创建 newstr 和 k 局部变量。如果你真的需要它们是全局的,你可能想要撤消它。

于 2013-02-04T08:00:22.823 回答