我有一个电子邮件注册和搜索框,框内有标签,IE邮箱在输入内部显示“注册”。当您在框中单击该值时,将删除该值以允许您输入电子邮件,如果您不输入任何内容并单击,则会显示“注册”。我使用以下代码:
$(function() {
swapValues = [];
$(".swap_value").each(function(i){
swapValues[i] = $(this).val();
$(this).focus(function(){
if ($(this).val() == swapValues[i]) {
$(this).val("");
}
}).blur(function(){
if ($.trim($(this).val()) == "") {
$(this).val(swapValues[i]);
}
});
});
});
但是,我在控制台中收到以下错误,因此可能会遇到其他脚本问题。我完成调试后肯定会知道。
错误 分配给未声明的变量swapValues
有更好的方法吗? THX
答案 0 :(得分:1)
我认为你还需要2个听众
$('.swap_value').focus(function(){
if($(this).val() == 'sign up'){
$(this).val('');
}
}).blur(function(){
if($(this).val() == ''){
$(this).val('sign up');
}
});
我希望这能为您提供如何使用2个字段的示例:
<html>
<body>
<input type="text" value="sign up" class="swap_value singup"/>
<input type="text" value="search" class="swap_value search"/>
</body>
</html>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script>
//<!--
$(document).ready(function(){
$('.swap_value').focus(function(){
if($(this).val() == 'sign up' || $(this).val() == 'search'){
$(this).val('');
}
});
$('.search').blur(function(){
if($(this).val() == ''){
$(this).val('search');
}
});
$('.singup').blur(function(){
if($(this).val() == ''){
$(this).val('sign up');
}
});
});
//-->
</script>
</body>
</html>
答案 1 :(得分:1)
这可能太晚了,但我让你的代码稍作修改:
var swapValues = [];
$('input.swap_value').each(function(i){
swapValues[i] = $(this).attr('value');
$(this)
.focus(function(){
if ( $(this).attr('value') == swapValues[i] ) {
$(this).attr('value','');
}
})
.blur(function(){
if ( $(this).attr('value') == '' ) {
$(this).attr('value', swapValues[i]);
}
});
});
基本上我现在使用.attr('value')
代替.val()
。我不确定这是不是你的问题,但上面的代码确认在一个页面上处理多个文本输入。
答案 2 :(得分:0)
这是一个老问题,但是现在有很多新方法可以做到这一点。 HTML5中的placeholder
属性涵盖了此功能,但IE9及更早版本和Opera Mini不支持此功能。
示例强>
<input type="email" placeholder="Sign Up" required>
请注意类型和必需属性。合并后,支持email
类型的浏览器将对客户端进行有效电子邮件检查。不支持email
类型的浏览器将呈现常规文本框。还有search
类型提供&#34; x&#34;根据需要清除搜索字词。它还会在不受支持的浏览器中恢复为纯文本框。
如果您必须支持旧浏览器,则接受的答案可以作为后退。