【问题标题】:jQuery Validation plugin errorPlacement with wildcard selector带有通配符选择器的 jQuery 验证插件 errorPlacement
【发布时间】:2014-01-10 21:02:17
【问题描述】:

我正在使用 jQuery Validation 插件并尝试将 errorPlacement 回调函数与通配符选择器一起使用。我已经尝试了无数种使用和不使用.attr 方法的通配符语法排列(并尝试了其他几种方法)并且无法使其正常工作。

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

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

我想选择所有以“cdlradio”开头的输入元素

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

任何帮助将不胜感激。

【问题讨论】:

    标签: jquery jquery-validate wildcard errorplacement


    【解决方案1】:

    这不是正确的格式...

    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) ...
    

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

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

    “开始于”演示:http://jsfiddle.net/aBrL2/3/

    【讨论】:

    • 我知道使用 .attr() 方法有问题,因为我已经在我认为是通配符语句中引用了元素名称。使用 indexOf 绝对是更好的方法。感谢您的澄清和修复。完美运行!
    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多