Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中编写onblur和onfocus事件?_Javascript_Jquery - Fatal编程技术网

如何在javascript中编写onblur和onfocus事件?

如何在javascript中编写onblur和onfocus事件?,javascript,jquery,Javascript,Jquery,问题: 问题? 如何概括或优化此代码?您始终可以在JavaScript中附加以下方法: function setBlurFocus() { var user_input = document.getElementById('id_username'); user_input.onblur = someFunction; // or with an anonymous function: user_input.onfocus = function() {

问题:

问题?
如何概括或优化此代码?

您始终可以在JavaScript中附加以下方法:

function setBlurFocus() {
    var user_input = document.getElementById('id_username');
    user_input.onblur = someFunction;
    // or with an anonymous function:
    user_input.onfocus = function() {
        // do something
    }
}
阅读更多关于和的信息

进一步解释:

您已将函数setBlurFocus附加到文档的加载事件。如果必须使用JavaScript访问DOM元素,这是正确的。当创建所有元素时,将触发load事件

如果将setBlurFocus附加到输入字段的模糊事件,则该函数仅在文本框失去焦点时执行

根据您的问题,我得出结论,您不希望在HTML中设置事件处理程序,但希望在setBlurFocus函数中设置它们

关于您的更新:

这是错误的:

user_input.onblur = userSetBlur();
这会将函数的返回值指定给onblur。您希望分配函数本身,因此必须编写:

 user_input.onblur = userSetBlur;
调用该函数。你不希望在大多数情况下,有例外,见下文

此外,onblur不必使用命名函数,onfocus不必使用匿名函数。这只是一个例子,向你展示你拥有的各种可能性。例如,如果您仅将事件处理程序分配给一个元素,则无需将其定义为额外函数。但是,如果要重用事件处理程序,就必须这样做

以下是一个改进的版本:

function setBlurFocus () {
    var values = ["Username", "Email", "Password"];
    var elements = [
        document.getElementById('id_username'),
        document.getElementById('id_email'),
        document.getElementById('id_password')
    ];

    for(var i = elements.length; i--; ) {
        elements[i].onblur = setValue(values[i]);
        elements[i].onfocus = emptyValue;
    }
}

function setValue(defaultValue) {
    return function(){this.value = defaultValue;};
}

function emptyValue() {
    this.value = '';
}
事件处理程序中的这个元素是指处理程序绑定到的元素

注意:这里setValue返回一个函数,这就是为什么我们在本例中调用setValue而不仅仅是赋值

重要提示:如果用户输入了一些数据,这也会将值重置为Username等。您必须确保,只有在用户未输入数据的情况下才重置它。比如:

function setValue(defaultValue) {
    return function(){
        if(this.value !== "") {
            this.value = defaultValue;
        }
    };
}
您必须定义类似的emptyValue:


现在我知道了您真正想要做的事情,请看一看。

您始终可以在JavaScript中附加这些方法:

function setBlurFocus() {
    var user_input = document.getElementById('id_username');
    user_input.onblur = someFunction;
    // or with an anonymous function:
    user_input.onfocus = function() {
        // do something
    }
}
阅读更多关于和的信息

进一步解释:

您已将函数setBlurFocus附加到文档的加载事件。如果必须使用JavaScript访问DOM元素,这是正确的。当创建所有元素时,将触发load事件

如果将setBlurFocus附加到输入字段的模糊事件,则该函数仅在文本框失去焦点时执行

根据您的问题,我得出结论,您不希望在HTML中设置事件处理程序,但希望在setBlurFocus函数中设置它们

关于您的更新:

这是错误的:

user_input.onblur = userSetBlur();
这会将函数的返回值指定给onblur。您希望分配函数本身,因此必须编写:

 user_input.onblur = userSetBlur;
调用该函数。你不希望在大多数情况下,有例外,见下文

此外,onblur不必使用命名函数,onfocus不必使用匿名函数。这只是一个例子,向你展示你拥有的各种可能性。例如,如果您仅将事件处理程序分配给一个元素,则无需将其定义为额外函数。但是,如果要重用事件处理程序,就必须这样做

以下是一个改进的版本:

function setBlurFocus () {
    var values = ["Username", "Email", "Password"];
    var elements = [
        document.getElementById('id_username'),
        document.getElementById('id_email'),
        document.getElementById('id_password')
    ];

    for(var i = elements.length; i--; ) {
        elements[i].onblur = setValue(values[i]);
        elements[i].onfocus = emptyValue;
    }
}

function setValue(defaultValue) {
    return function(){this.value = defaultValue;};
}

function emptyValue() {
    this.value = '';
}
事件处理程序中的这个元素是指处理程序绑定到的元素

注意:这里setValue返回一个函数,这就是为什么我们在本例中调用setValue而不仅仅是赋值

重要提示:如果用户输入了一些数据,这也会将值重置为Username等。您必须确保,只有在用户未输入数据的情况下才重置它。比如:

function setValue(defaultValue) {
    return function(){
        if(this.value !== "") {
            this.value = defaultValue;
        }
    };
}
您必须定义类似的emptyValue:

现在我知道了您真正想要做的事情,请看一下。

关于您的更新

我使用jquery作为选项卡jquery,代码如下,您可以使用此链接检查一个实时样本:

html代码:

<form method="POST" action="#">   
             <input id="id_username" type="text" name="username" maxlength="100" />
<input type="text" name="email" id="id_email" />
<input type="password" name="password" id="id_password" /> 
</form> 
希望对您有所帮助。

关于您的更新

我使用jquery作为选项卡jquery,代码如下,您可以使用此链接检查一个实时样本:

html代码:

<form method="POST" action="#">   
             <input id="id_username" type="text" name="username" maxlength="100" />
<input type="text" name="email" id="id_email" />
<input type="password" name="password" id="id_password" /> 
</form> 

希望对您有所帮助。

您已经用jquery对其进行了标记,以下是如何在jquery中实现它:

function setBlurFocus () {
  //do stuff here
} 

$('#id_username').blur(setBlurFocus);


您已经用jquery对其进行了标记,因此在jquery中可以这样做:

function setBlurFocus () {
  //do stuff here
} 

$('#id_username').blur(setBlurFocus);


为什么不能以这种方式使用onblur和onfocus?这似乎是一种方法。为什么不能以这种方式使用onblur和onfocus呢?这似乎是解决问题的方法。我如何能够以这样的方式进行概括,即我只需要为每个元素编写一个模糊方法和另一个聚焦方法。只是一个小问题:我可以设置onfocus=this.blur;为…做标记。但是如何从JavaScript设置它呢?i、 我在这里错过了什么?document.getElementById'txtName'.onfocus=this.blur@hims056:您必须为onfocus:document.getElementById'txtName'.onfocus=function{this.blur;};分配一个函数;。谢谢@FelixKling。另一种方法是不使用函数:document.getElementById'txtName'.onfocus=document.getElementById'txtName'.blur;但是
你给出的解决方案更好,依赖性更小。我如何进行推广,使我只需要为每个元素编写一个模糊方法和另一个聚焦方法。只是一个小问题:我可以设置onfocus=this.blur;为…做标记。但是如何从JavaScript设置它呢?i、 我在这里错过了什么?document.getElementById'txtName'.onfocus=this.blur@hims056:您必须为onfocus:document.getElementById'txtName'.onfocus=function{this.blur;};分配一个函数;。谢谢@FelixKling。另一种方法是不使用函数:document.getElementById'txtName'.onfocus=document.getElementById'txtName'.blur;但是你给出的解决方案更好,依赖性更小。