繁体   English   中英

Javascript onFocus在页面加载时触发

[英]Javascript onFocus triggers on page load

小提琴

所以我遇到了这个问题。

我有一个简单的形式:

<form method="post" action="login.php">

<input type="text" name="Username" value="Username" />
<input type="password" name="Password" value="Password" />
<input type="submit" name="submit" value="Log in" />

</form>

这个脚本:

function focus(element) {

    console.log('focused ' + element.getAttribute('name'));

    var elementValue = element.value;
    var elementName = element.getAttribute('name');
    elementValue = (elementValue == elementName ? '' : elementValue);

}


var fields = ['Username', 'Password'];

for (var i = 0; i < fields.length; i++) {

    console.log(i + ': ' + fields[i]);

    var input = document.getElementsByName(fields[i])[0];

    console.log('input value: ' + input.value);

    input.onFocus = focus(input);

}

它应该为每个输入创建Focus事件监听器,并在用户点击任何字段时调用focus()函数。 但出于某种原因,正如控制台显示的那样,它只是为每个字段调用一次循环函数,并且只是停止不响应未来的Focus事件。

所以我的猜测是这行input.onFocus = focus(input);有问题input.onFocus = focus(input); ,但我不知道是什么。 我错过了什么?

在下面的行中,您将立即调用focus函数并传递返回值( undefined )。 您还需要使用onfocus而不是onFocus因为属性名称区分大小写。

input.onFocus = focus(input);

相反,您可以像这样使用.bind()

input.onfocus = focus.bind(null, input);

这将使用参数集设置函数,而不实际调用它。

更新了小提琴

因为您不是将focus 函数指定为onFocus事件的处理程序,而是分配其返回值undefined )。

试试这个:

input.onfocus = focus.bind(input, input);

要么

input.onfocus = function() { focus(input);

此外,您需要将onFocus更改为onfocus

MDN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM