Javascript onFocus在页面加载时触发

时间:2015-04-20 16:25:16

标签: 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()功能。但出于某些原因,正如控制台显示的那样,它只是为每个字段调用该函数一次循环,并且不再响应未来的焦点事件。

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

2 个答案:

答案 0 :(得分:0)

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

input.onFocus = focus(input);

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

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

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

<强> Updated fiddle

答案 1 :(得分:0)

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

请改为尝试:

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

或者

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

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

请参阅MDN