如果.focusout表单不包含值,则恢复为原始值
If on .focusout form contains no value, revert to original value?
我试图让我的<input.../>
字段在焦点上变为空白,如果在焦点上它们仍然是空白的,将它们恢复到原始值。
我本以为这样可以,但显然不行:
$('input').focus( function() {
var init_value = $(this).val();
$(this).val('');
});
$('input').focusout( function() {
var new_value = $(this).val();
if(new_value == "") {
$(this).val(init_value);
}
});
任何改变/建议,让它工作将是最感激的;)!
你应该考虑使用HTML5 placeholder
属性作为第一选择。
http://diveintohtml5.ep.io/forms.html占位符使用jQuery,您可以像这样修改原始脚本:
$('input').focus(function() {
$(this).val('');
});
$('input').focusout(function() {
if($(this).val('')){
$(this).val('Enter something');
}
});
例子: http://jsfiddle.net/jasongennaro/8bJcQ/
编辑
这是一个修改后的脚本来处理你评论中提到的情况:
至于jQuery选项,这根本无法满足它的需求原始值=值。我大概有8个不同的文本框说明其值,例如:"输入您的电子邮件地址","输入你的url"等:(.
$('input').each(function(){
var a = $(this).attr('value');
$(this).focus(function() {
$(this).val('');
});
$(this).focusout(function() {
if($(this).val('')){
$(this).val(a);
}
});
});
示例2: http://jsfiddle.net/jasongennaro/8bJcQ/3/
假设使用现代浏览器,有一种更简单的方法可以做到这一点。只需添加属性placeholder="some text"
,浏览器将为您处理这一切。如果您必须支持旧版本的浏览器,请尝试:
var init_value;
$('input').focus( function() {
init_value = $(this).val();
$(this).val('');
});
$('input').blur( function() {
var new_value = $(this).val();
if(new_value == "") {
$(this).val(init_value);
}
});
你的问题是init_value
的范围。您在匿名函数中定义了它,并且无法从第二个匿名函数访问该值。要解决这个问题,您只需在每个事件处理程序的作用域之外定义init_value
。
还请注意我是如何使用.blur()
而不是.focusout()
的。jQuery API解释了两者之间的区别。
相关文章:
- 从jquery对话框恢复原始数据,脚本不起作用
- CSS 动画将恢复为原始状态
- jquery悬停后恢复到原始图像是更好的方式
- 如何在拖动时使项目恢复到其原始位置
- 在 history.pushState 之后导航时恢复原始页面
- 按 Esc 按钮后恢复为原始 html
- 向上滚动时,基于滚动位置的 javascript 动画不会恢复到其原始状态
- Javascript变量恢复为原始变量
- HTML In Page 在使用 AJAX 更改内部 HTML 后恢复为原始 HTML
- 是否可以在每次单击按钮时更改背景颜色并恢复为纯JavaScript中的原始颜色
- 元素在 JQuery 动画后恢复为原始大小
- 为什么这个 HTML/JS 在更改内部 HTML 后会恢复到原始状态
- jQuery UI如果移动的距离小于一定距离,则可拖动恢复到原始位置
- 用Selenium突出显示WebElement并恢复原始边界
- Kendo UI网格取消不会恢复原始数据
- 如何恢复到原始CSS
- 如何在. CSS()方法后恢复到原始CSS值
- 如何在使用微软翻译api翻译后恢复原始文本?
- jQuery UI可排序-在ajax错误后恢复原始位置
- 如何恢复原始的文件状态后脚本