如何在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;但是你给出的解决方案更好,依赖性更小。