2013-03-06 84 views
4

我正在寻找一种优雅的方式来检查输入值是否为空且不是默认值。检查输入值是否为空或默认

例如,假设我们输入的值为Username,这是一个默认值,一旦用户单击此输入字段Username将被删除,以便用户可以输入他想要的内容。只是要清楚这是当网页加载它会怎样看:

<input type="text" class="defaultValue" value="Username" />

现在,在默认情况下此字段将永远是空的,除非用户将做一些事情让它空的,所以只是为了让当然,我需要检查这两件事情。我会这样做的方式很简单:

if($(".defaultValue").val().length == 0 || $(".defaultValue").val() == "Username") 
    alert("Please enter your username"); 

所以这个工程,但看起来丑陋地狱。通常我需要处理巨大的表单,所以我的代码变得非常难看,难以管理,因此,有什么方法可以改善这一点?

谢谢。

+6

你为什么不使用占位符属性? – undefined 2013-03-06 22:16:08

+0

@undefined我从来没有听说过这个属性。 – Linas 2013-03-06 22:17:08

+0

@undefined只是看了一下文档,它说'注意:Internet Explorer 9和更早版本不支持输入标记的占位符属性。'并且我需要支持IE 9。 – Linas 2013-03-06 22:18:41

回答

12

尝试:

if (this.value == '' || this.value == this.defaultValue) { 
    // value is empty or is default value 
} 
+0

那有什么区别?只有删除0才能使它变得漂亮? – Garry 2013-03-06 22:19:41

+0

这绝对看起来更好。 – Linas 2013-03-06 22:20:41

+0

@ Garray-删除不必要的jQuery文件并使用直接属性访问意味着它不仅仅是少一些代码,但可能快20倍左右。 – RobG 2013-03-06 22:23:17

2

试着写一个辅助函数为你做这项检查。

var isEmptyOrDefault = function(field, default) { 
    var value = $(field).val(); 
    return (value.length === 0 || value === default); 
}; 

所以你可以使用它:

if (isEmptyOrDefault($('.defaultValue'), 'Username')) { 
    alert("Please enter your username"); 
} 
+0

在你的例子中,你将'field'作为jQuery对象传递,但是在'isEmptyOrDefault()'里面有'$(field).val()'这会导致'$($('。defaultValue' ))。val()'这是不会工作的。 – idrumgood 2013-03-06 22:24:19

+2

@idrumgood其实这是有效的,但是_overkill_。 – undefined 2013-03-06 22:25:37

+1

@undefined呵呵,所以确实如此。那么,sweetamylase是幸运的,jQuery是如此宽容:) – idrumgood 2013-03-06 22:29:59