2010-10-29 123 views
0

如何将变量中的INPUT值保存为不写大量重复的代码?如何在变量中保存INPUT的值?

like var input = $(this).val();

example

<div id="form"> 
    1. <input type="text" value="title" /> 
    2. <input type="text" value="value" /> 
</div> 

$(function(){ 
    $('#form input:eq(0)').bind({ 
    focus: function(){ 
     if($(this).val()=='title'){ 
      $(this).val(''); 
     } 
    }, 
    blur: function(){ 
     if($(this).val() == ''){ 
      $(this).val('title'); 
     } 
    } 
    }); 

    $('#form input:eq(1)').bind({ 
    focus: function(){ 
     if($(this).val()=='value'){ 
     $(this).val(''); 
     } 
    }, 
    blur: function(){ 
     if($(this).val() == ''){ 
      $(this).val('value'); 
     } 
    } 
    }); 
}); 

回答

2

这里是我的解决方案。我会工作到具有类中的任何字段=“设置默认”

结帐的working example

这里是代码:

$(function(){ 
    $('.set-default').bind({ 
    focus: function(){ 
     if(typeof($(this).data('def')) == 'undefined'){ 
       $(this).data('def', this.value) 
     } 
     if(this.value == $(this).data('def')){ 
      this.value = ''; 
     } 
    }, 
    blur: function(){ 
     if(this.value == ''){ 
      this.value = $(this).data('def'); 
     } 
    } 
    }) 
}); 

基本上是一个有类设置默认将采取行动的所有领域随你便。您可以随时将选择器更改为$('#form input'),但我认为它没有用。

HTH

+0

谢谢,几乎我想要的 – Algorithm 2010-10-29 08:38:10

+0

不要与'undefined'比较 - 使用'typeof',不要创建自定义属性 - 使用'.data()',不要在jQuery的'$() '当你可以改用DOM时。 – 2010-10-29 09:25:46

+0

@益江 - 完全正确!重新考虑了代码根据最佳practives :) – 2010-10-29 10:32:06

3

我不完全相信你的要求,但这个重构将用于切换值工作。编辑:增加了默认的属性添加到HTML元素和缩短的jQuery(仍然可读虽然)http://jsfiddle.net/UmZeZ/

<div id="form"> 
    1. <input type="text" value="title" default="title" /> 
    2. <input type="text" value="value" default="value" /> 
</div> 


$(function() { 
    $('#form input').bind('focus blur', function() { 
     var value = $(this).attr('default'); 
     if ($(this).attr('value') == value) { 
      $(this).attr('value', ''); 
     } else if ($(this).attr('value') === '') { 
      $(this).attr('value', value); 
     } 
    }); 
}); 
+0

我再次重构,这个时候编辑输入元素并结合绑定。我认为这样做尽可能短,你仍然可以阅读。 – Scott 2010-10-29 08:34:54

3

来完成你想要什么,我会建议使用HTML5 placeholder属性。使用Modernizr,我们可以检测浏览器对此功能的支持,通过这段简单的代码,即使对于不支持placeholder的浏览器,我们也可以使其工作。

if(!Modernizr.input.placeholder){ 
    var input = $('input[type="text"]'); 

    input.focus(function(){ 
     if(this.value === this.getAttribute('placeHolder')) this.value = ''; 
    }).blur(function(){ 
     if(this.value === '') this.value = this.getAttribute('placeHolder'); 
    }).blur(); 
} 

参见本在这里现场演示:http://www.jsfiddle.net/yijiang/cTDsL/1

+0

只有当用户不再在该领域再次运行时,您的代码才能工作。如果他将该字段返回空白,但这没有用。另外为什么你需要依赖HTML5,而jQuery(如你所说)提供了.data()函数。如果用户使用浏览器而不支持HTML5,那么您的解决方案将无法工作。 – 2010-10-29 10:34:37

+0

@Nik右键,修正。无论是否使用HTML5,这都可以工作。没有理由为什么HTML5不应该在浏览器支持它们时立即使用。 – 2010-10-29 10:52:18