Javascript onFocus 在页面加载时触发

标签 javascript onfocus

Fiddle

所以我遇到了这个问题。

我有一个简单的表格:

<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() 函数。但出于某种原因,如控制台所示,它只是为每个字段循环调用一次该函数,并且只是停止不响应 future 的 Focus 事件。

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

最佳答案

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

input.onFocus = focus(input);

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

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

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

Updated fiddle

关于Javascript onFocus 在页面加载时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29753272/

相关文章:

javascript - 对全局变量及其使用方法的困惑

javascript - 从javascript中的多行字符串读取变量

javascript - 在 javascript 中将 onfocus 传递给 onmouseenter 事件

平滑显示/隐藏元素的 JavaScript 库

javascript - 如何使用 JavaScript 访问 JSON 数据中嵌套数组中的特定元素?

javascript - 提供应用程序名称时未激活 AngularJS 解析器

angular - 如何在 Angular 2.0 中使用 formControl 访问 native HTML Input 元素

android - Tab on focus 或 Tab on click 要增加的图像尺寸

javascript - 如何聚焦从屏幕外滑入的输入?

php - 如何使 jQuery 自动完成列表在焦点上显示所有选项并在选择选项后隐藏?