我在密码类型的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";
});
答案 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;