2013-04-06 16 views
0

我找不到答案。所以,我希望这不是多余的..

有一个简单的表单元素:

<label>Email Address:</label> 
<input type="text" onblur="validateEmail(this)" /> 

而且我运行一个验证脚本来检查这个输入值(的onblur)是否有效。很棒!

现在..我想要做的是保持脚本通用 - 所以我不必依靠类名或ID来使它工作。

所以我想知道的是如果该值不是电子邮件地址,该如何对此字段执行操作。具体来说,我想更改标签的颜色,并在该字段上放置红色边框。

下面是不起作用的脚本:

var inputTextTest = field.value; 
var filter = /^((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*?)\s*;?\s*)+/; 

if (filter.test(inputTextTest)) { 
    var name = field; 
    $(this).focus(); 
    $(this).css("border","1px"); 
    $(this).css("border-color","red"); 
} else { 
    $(this).css("border", "none"); 
} 

我可以看到我为$(这)调用是行不通的。那么,如何在这个特定的领域采取行动,并保持脚本完全通用(即不依赖于特定的类或ID名称)?

非常感谢您的帮助!

+0

你必须使用突兀的JavaScript? – eomeroff 2013-04-06 20:34:19

+0

'this'的使用与目标元素是否具有名称无关。可以使用名称/ ID /类或者只是元素的类型进行选择,以便可以附加事件处理程序。在一个事件处理程序中,this指的是目标元素。如果选择器正确并且处理程序在适当的事件发生时运行,那么选择器**必须已经完成它的工作。 '这'不关心选择者允许处理程序被附加。也许是我,但这个问题没有意义。而且,问题的标题和文本似乎并不一致。 – 2013-04-06 21:21:50

回答

3

我会猜测,参数引用thisfield,因为你正在使用field.value在顶部有:

validateEmail(field) { 
    var inputTextTest = field.value; 
    var filter = /^((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*?)\s*;?\s*)+/; 

    if (filter.test(inputTextTest)) { 
     var name = field.name; 
     $(field).focus().css("border","1px solid red"); 
    } else { 
     $(field).css("border", "none"); 
    } 
} 
+0

为此投票,就像您检索价值的方式返回并进行修改。 – eomeroff 2013-04-06 20:36:07

+0

这样做..谢谢adeneo。我知道这一定是简单的事情。在onBlur调用中使用“this”是它的唯一功能。像魅力一样工作。再次感谢。 – 2013-04-07 16:56:06

0

为了使它通用我建议你使用现有的验证库之一:

https://github.com/DiegoLopesLima/Validate#readme

原因$(本)不为你工作,是因为它不是定义,您不在回调或创建该引用的函数中。

做一个通用的循环和使用$(本),你需要做这样的事情:

$('input').each(function() { 
    $(this) // will now reference each element. 
}); 
1

尝试field而不是this假设函数的声明看起来像validateEmail(field)

onblur你逝去的this为对象的功能,但这时需要USEE当你声明的函数参数

0

放在一个功能脚本,并把对象作为参数,则对对象执行的一切,你使用的任何PARAM NAME 。