【问题标题】:jQuery validate, element.value is undefined in errorplacementjQuery 验证,element.value 在错误放置中未定义
【发布时间】:2015-02-10 07:49:00
【问题描述】:

我尝试为我的注册表建立验证。我正在使用 jQuery 验证。当文本框为空时,我希望错误消息显示为占位符。当添加文本但仍然抛出错误时,我想使用自定义设置。

我的问题是在调试这段代码时:

.validate({
    debug: true,
    errorPlacement: function (error, element) {
        if (element.value === "") {
            element.attr("placeholder", error.text());
        }
        else {
            alert(element.value);
        }
    }
});

我在 elment.value 上未定义。根据 Devtools element.value 是文本框中的文本(在文本框中添加文本时会发生变化),但当我将值视为左侧的红色圆圈时,它也表示它是未定义的。

我正在为文本框表单使用 MVC 助手:

@Html.TextBoxFor(m => m.SurName, new { @class = "form-control required", placeholder = "Förnamn", @type = "SurName" })

我使用了错误的值或属性?

【问题讨论】:

  • 什么是@type = "SurName"?这不是有效的 type 属性
  • SurName 来自我的 ViewModel,它有一个相应的列。像这样:[Column("SurName")]。它使自动填充功能在我的浏览器中正常工作。
  • Here 是有效的 type 属性列表 - 还是您的意思是 id = "SurName"
  • 我使用了一个指南,展示了如何使用 Columns 创建自定义类型。我现在找不到它,但它解决了我将正确的值设置为自动填充的问题。这与我的 JavaScript 问题有关吗?
  • 我不知道。我只是提出它,因为它是无效的 html。但是看着你的屏幕截图(RHS),它实际上显示type="text"

标签: javascript jquery asp.net-mvc jquery-validate


【解决方案1】:

element.valueerrorPlacement 中未定义

您正在使用value 破坏它,它是未定义的并且不是此函数的有效参数。只有errorelement 被定义为errorPlacement 函数的两个参数。而是使用 jQuery val() 来获取元素的值。

errorPlacement: function (error, element) {
    if (element.val() === "") {
        element.attr("placeholder", error.text());
    }
    else {
        // alert(element.val()); // <- Safari fail
        console.log(element.val());
    }
}

演示:http://jsfiddle.net/atrL0h1s/


但是,我永远不会使用alert(),因为您可以使用 jQuery 做更好看的事情。在这种情况下,关闭 alert() 会导致在使用 Safari 时以无限循环的方式一遍又一遍地出现新警报。

【讨论】:

  • 非常感谢 Sparky!我将尝试将 value 切换为 val() 并希望最好。顺便说一句,警报框只是用于测试,我正在考虑使用烤面包机来显示价值。无论如何,谢谢你的回复。我会回复你,让你知道它是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多