- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:
<body onload="setBlurFocus()">
<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>
</body>
我写道:
function setBlurFocus () {
var user_input = document.getElementById('id_username');
var email = document.getElementById('id_email');
var password = document.getElementById('id_password');
user_input.onblur = userSetBlur();
email.onblur = emailSetBlur();
password.onblur = passSetBlur();
user_input.onfocus = function() {
document.getElementById('id_username').value = ''
}
email.onfocus = function() {
document.getElementById('id_email').value = ''
}
password.onfocus = function() {
document.getElementById('id_password').value = ''
}
}
function userSetBlur() {
document.getElementById('id_username').value = 'Username'
}
function emailSetBlur() {
document.getElementById('id_email').value = 'Email'
}
function passSetBlur() {
document.getElementById('id_password').value = 'Password'
}
有问题吗?如何泛化
或优化
这段代码?
最佳答案
您始终可以附加 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
}
}
阅读更多关于 traditional event handling 的信息和 events in general .
进一步说明:
您将函数 setBlurFocus
附加到文档的 load
事件。如果您必须使用 JavaScript 访问 DOM 元素,这是正确的。 load
事件在创建所有元素时触发。
如果将 setBlurFocus()
附加到 input
字段的 blur
事件,那么该函数仅在文本框出现时执行失去焦点。
从你的问题我得出结论,你不想在 HTML 中设置事件处理程序,但你想在 setBlurFocus
函数中设置它们。
关于您的更新:
这是错误的:
user_input.onblur = userSetBlur();
这会将函数的返回值分配给onblur
。你想分配函数本身,所以你必须写:
user_input.onblur = userSetBlur;
()
调用 函数。你不希望那样(在大多数情况下,有异常(exception),见下文)。
此外,您不必为 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 = '';
}
事件处理程序中的
this
指的是处理程序绑定(bind)到的元素。
注意:这里 setValue
返回一个函数,这就是我们在这种情况下调用 setValue
的原因(并且而不仅仅是分配它)。
重要说明:如果用户输入了一些数据,这也会将值重置为 Username
等。您必须确保仅在用户未输入数据时才重置它。像这样的东西:
function setValue(defaultValue) {
return function(){
if(this.value !== "") {
this.value = defaultValue;
}
};
}
并且您必须定义类似的 emptyValue
:
function emptyValue(defaultValue) {
return function(){
if(this.value === defaultValue) {
this.value = "";
}
};
}
现在我知道你真正想做什么,也看看HTML5's placeholder
attribute .
关于javascript - 如何在 javascript 中编写 onblur 和 onfocus 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5014710/
$('#lPass').focus(function() { if (this.value == this.defaultValue) this.value = '';
我有一个容器 div,里面包含许多输入和复选框,我想仅在容器 div 失去焦点时触发 onBlur 事件,而不是每次其中的任何元素失去焦点时触发 onBlur 事件 最佳答案 react docume
我的表单检查不起作用。如果我将别名字段留空,它将返回已填充的名称字段。 var alias = document.getElementById("alias"); var name = documen
我有一个包含 5 个字段和一个提交按钮的表单。在其中一个字段上,我有一个 onblur 事件,但如果用户更改该文本框中的值并直接单击提交按钮,那么在这种情况下 onblur 不会被触发或不起作用。在这
我正在尝试创建一个函数,允许编辑 div,并且当不再聚焦时(例如单击元素外部),它应该执行一个函数。 当用 fiddle 测试这个时,预期的响应不会发生。相反,当单击该元素时,它既使内容可编辑,又同时
我有一个带有 React-InstantSearch: 的导航栏为我提供了自动完成功能,有一个 onChange触发显示建议框的事件。还有一个onBlur当您离开搜索框并隐藏该框时触发的事件。这个o
我有两个输入,它们是 的一部分。我试图在其中之一发生更改(dpFin)后获取输入的值。问题是,当我使用 var endDt = document.getElementById("dpFin").va
我有一个默认情况下禁用的文本框... onclick 可以工作并使其能够输入,但是当我单击单选按钮时...它不会再次禁用该文本框 有什么线索吗? 提前致谢 李 最佳答案 没有“启用”属性。您必须将
我正在使用 JavaScript 对 HTML 表单进行验证。为什么刷新页面时Validator.validateInput会执行? 我希望它在模糊元素“first”时执行。 var Validato
当使用 jQuery 将文本输入到文本框时,我尝试编辑选择输入的内容。这是我的文本框 这是我的多重选择框 Yazılımevi 这是我的 javascript 函数(我知道这很简单) func
我有一个使用 jquery form validator 的表单:我的问题是如何让验证不仅在提交时触发,而且在模糊时触发?我希望它验证模糊时的每个单独字段(而不是模糊时的整个表单,因为我不希望为尚未向
我有以下代码,也称为内联代码,如下所示。问题是警报永远不会触发。在 Firebug 中,我可以看到数据充满了我的对象,但仍然没有触发警报。有什么想法吗? function update(s_arriv
如何在 javascript onblur 中为文本框中输入的所有值添加前缀 - 符号 最佳答案 首先,您需要添加事件处理程序。一旦你这样做了,这就是你的功能: function textBoxBlu
我正在使用 onblur 事件来获取日期选择器中的日期值。这是我的控件: 这是我的功能: function UpdatePrice(_this) { console.log(_this.va
我有一个表格,其中包含许多用户可以为其赋值的文本输入字段。我的目标是,如果用户“onBlur”的any 字段,则将激活一个功能。我可以通过单独标记每个单元格来解决这个问题,但它会非常重复,我相信有更有
我正在使用 onblur 进行文本框数据检查。 OnBlur 工作正常,直到或除非我们不按 ALT + TAB 或 Windows 按钮。 如果我按下 ALT + TAB 然后模糊函数执行多次.. 例
HTML It is a div which has a dark future Not Remove 和脚本 $(function(){ $("input").blur(function(
我在 jquery 的 blur 和 onblur 事件上遇到了陌生人问题。当您对输入进行模糊处理时,首先执行 onblur 事件和 .blur 方法。但是,当您通过点击 anchor 标记来调用触发
我正在使用 jQuery 将一个输入字段的值复制到另一个模糊的输入字段。这是我的代码: $( "input[id$=token-input-search_field]" ).blur( functio
我有一个应用程序,我需要更新数字,为此,我计划如下,当我单击数字容器时,我将其转换为 jquery 的输入字段,然后在模糊时我想将其关闭为容器div内的纯文本,然后触发ajax在数据库中更新它,但第一
我是一名优秀的程序员,十分优秀!