如何在执行一次后在javascript中停止focus()函数?

时间:2017-04-21 13:39:22

标签: javascript jquery

我在密码类型的html中有一个输入字段;我创建了一个函数,在输入字段中显示focus()上的密码。但问题是我希望函数只执行一个,然后用户可以更改输入而不必每次都使focus()工作。

这是脚本: 有一个测试:它显示了在其中写入密码的提示,然后脚本检查写入的密码是否等于会话中的实际用户的密码,如果是,则用户可以看到密码他点击了它,否则他会收到警告,告诉他不允许看密码。

$('input[class=password]').focus(function(){
               this.type = 'password';
               $pwd=prompt('saisir votre mot de passe');
               if($pwd==='{{ search.password }}') {
                      this.type = 'text';
                     // this.blur();
                   this.off("focus");
                   }
                   else
                   {
                       alert("Vous ne pouvez pas voir les mots de passe!");
                       this.blur();
                   }

               }).blur(function(){
               this.type = "password";
           });

3 个答案:

答案 0 :(得分:1)

this是dom元素,而不是jQuery对象。因此,要使用off(),您需要更改:

this.off("focus");

要:

$(this).off("focus");

还有one()只会执行一次事件处理程序:

$('input[class=password]').one('focus', function(){...

答案 1 :(得分:0)

您创建了一个将函数转换为单次使用函数的函数。

function run_zees_only_wence(func) {
    var ran = false
    return function () {
        if (ran === false) {
            func.apply(this, arguments);
        }
        ran = true;
    };
}

function say_it() {
    console.log("secret");
}

var say_it_only_once = run_zees_only_wence(say_it);

say_it_only_once (); // "secret"
say_it_only_once (); // -nothing-
say_it_only_once (); // -nothing-
// ..

这个答案可能会或可能不会受到a scene from 'Allo 'Allo的启发。

更合适的解决方案是删除事件监听器。

答案 2 :(得分:0)

您只能使用jQuery.fn.one运行一次事件监听器。



$('input[class=password]').one('focus', function() {
  this.type = 'password';
  $pwd = prompt('saisir votre mot de passe');
  if ($pwd === '{{ search.password }}') {
    this.type = 'text';
    // this.blur();
    this.off("focus");
  } else {
    alert("Vous ne pouvez pas voir les mots de passe!");
    this.blur();
  }
}).blur(function() {
  this.type = "password";
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="password" />
&#13;
&#13;
&#13;