我可以实现这个目标吗?如果用户将该字段留空,我想获得原始值。
这是我到目前为止所得到的。 Jsfiddle Demo
这是我的代码
$(document).ready(function() {
var field = $('input[type="text"]');
field.focus(function() { //Empty the field on focus
var thisValue = $(this).val();
$(this).attr("value", "");
});
field.blur(function() { //Check the field if it is left empty
if ($(this).val() == "") {
//alert('This field can not be left empty');
$(this).val(thisValue);
}
});
});
答案 0 :(得分:5)
您实际上是在描述placeholder
attribute,它在所有主流浏览器中都是本机支持的。但是,旧版浏览器不支持它。要获得更广泛的支持,您需要 shim 支持此属性。网上有许多选项可供您使用,但如果您愿意,可以自己动手。
基本上你想让自己和其他人使用标准标记:
<input name="fname" placeholder="First Name">
使用jQuery,您将回复具有focus
属性的任何元素的blur
和focusin
(或focusout
和placeholder
)事件。如果元素已聚焦并且具有占位符值,则清除该元素。如果元素模糊且为空,则提供占位符值。
这有点冗长,但我添加了评论以帮助遵循逻辑:
// Written and tested with jQuery 1.8.1
(function ( $ ) {
// Play nice with jshint.com
"use strict";
// Abort if browser already supports placeholder
if ( "placeholder" in document.createElement("input") ) {
return;
}
// Listen at the document level to work with late-arriving elements
$(document)
// Whenever blur or focus arrises from an element with a placeholder attr
.on("blur focus", "[placeholder]", function ( event ) {
// Determine the new value of that element
$(this).val(function ( i, sVal ) {
// First store a reference to it's placeholder value
var placeholder = $(this).attr("placeholder"), newVal = sVal;
// If the user is focusing, and the placehoder is already set
if ( event.type === "focusin" && sVal === placeholder ) {
// Empty the field
newVal = "";
}
// If the user is blurring, and the value is nothing but white space
if ( event.type === "focusout" && !sVal.replace(/\s+/g, "") ) {
// Set the placeholder
newVal = placeholder;
}
// Return our new value
return newVal;
});
})
// Finally, when the document has loaded and is ready
.ready(function () {
// Find non-autofocus placeholder elements and blur them
// This triggers the above logic, which may provide default values
$(":input[placeholder]:not([autofocus])").blur();
});
}(jQuery));
此特定垫片仅提供基本功能。其他人可以在使用占位符值时扩展对更改字体颜色的支持,以及在开始键入之前保持占位符值可见(此方法只是在焦点时立即将其删除)。
答案 1 :(得分:1)
这也是一个非jQuery的答案:
<input type="text" name="zip_code" id="zip_code_value" value="Name" onfocus="if(this.value=='Name'){this.value=''}" onblur="if(this.value==''){this.value='Name'}">
您可以只更新输入标记,然后就不需要jQuery了。
答案 2 :(得分:1)
占位符:
$(document).ready(function() {
var field = $('input[type="text"]');
field.focus(function() {
var placeholder = $(this).data('placeholder');
if (this.value == placeholder)
this.value = "";
});
field.blur(function() {
if (this.value === "") {
this.value = $(this).data('placeholder');
}
});
});
关于$(this).val()
:
了解您的DOM属性和功能
虽然jQuery的目标之一是抽象DOM,但知道 DOM属性非常有用。其中最常见的一种 那些在不了解DOM的情况下学习jQuery的人的错误是 利用jQuery的强大功能来访问一个属性 元素:
$('img').click(function() {
$(this).attr('src'); // Bad!
});
在上面的代码中,这是指触发click事件处理程序的元素。代码 以上既缓慢又冗长;下面的代码功能相同 并且更短,更快,更易读。
答案 3 :(得分:0)
你应该使thisValue成为一个全局变量。这样它随处可见。像这样的东西。
$(document).ready(function() {
var field = $('input[type="text"]');
var thisValue
field.focus(function() {//Empty the field on focus
thisValue = $(this).val();
$(this).attr("value","");
});
field.blur(function() {//Check the field if it is left empty
if($(this).val()=="") {
//alert('This field can not be left empty');
$(this).val(thisValue);
}
});
答案 4 :(得分:0)
这是我最近一直在使用的内容:
HTML:
<input type="text" name="s" id="s" value="Search" />
<input type="text" name="email" id="email" value="you@domain.com" />
...
JavaScript的:
// Default Input Field Text
$(document).ready( function(){
$("#s, #email, #phone, #name").live("focus", function(){
if ( $(this).val() == $(this).attr("rel") ) $(this).val('');
}).live("blur", function(){
if ( $(this).val() == '' ) $(this).val( $(this).attr("rel") );
}).each( function(){
$(this).attr("rel", $(this).val() );
});
});
答案 5 :(得分:0)
删除thisValue
var
$(document).ready(function() {
var field = $('input[type="text"]');
field.focus(function() {//Empty the field on focus
thisValue = $(this).val();
$(this).attr("value","");
});
field.blur(function() {//Check the field if it is left empty
if($(this).val()=="") {
//alert('This field can not be left empty');
$(this).val(thisValue);
}
});
});