2014-01-10 38 views
0

我正在使用jQuery验证插件并尝试使用带有通配符选择器的errorPlacement回调函数。我尝试了无数种通配符语法,并且没有使用.attr方法(并尝试了其他几种方法),并且无法使其正常工作。jQuery验证插件errorPlacement与通配符选择器

我已经阅读了几十个关于通配符的线程,以及api文档,但没有解决它们在像这样的需要使用'元素'的函数中的使用。似乎无法让我的头周围...

/*** This will work but only for the specified string ****/ 
if (element.attr("name") == "cdlradio1") 

我想选择与

var $validator = $("#myform").validate({ 
    errorPlacement: function(error, element) { 
if (element.attr("[name^='cdlradio']")) 
    error.insertAfter(element.closest(".bootradlab")); 
else 
    error.insertAfter(element); 
} 

任何帮助,将不胜感激“cdlradio”开头的所有输入元素。

回答

0

这不是正确的格式...

if (element.attr("[name^='cdlradio']")) ... 

因为,the .attr() method is looking for an attribute as its only argument。显然,[name^='cdlradio']选择器,而不是属性。您不需要选择器,因为您的目标元素是已由element参数选择

你必须得到现场name和检查,看看它是否包含你的字符串...

if (element.attr('name').indexOf('cdlradio') >= 0) ... 

“通配符” DEMO:http://jsfiddle.net/aBrL2/2/

BTW - ^= is the "starts with" selector一张通配符。然而,我上面的解决方案是一个真正的通配符,因为只要字符串出现在某个位置,它就不会关心位置。通过将>=运营商更改为==运营商,我的答案可以轻松转换为“开始”。

“打头的” DEMO:http://jsfiddle.net/aBrL2/3/

+1

我知道有一些错误使用.attr()方法,因为我已经在引用我的想法是一个通配符声明元素名称。使用indexOf绝对是更好的选择。感谢您的澄清和修复。完美的作品! –