【问题标题】:Retrieving value from dynamically generated elements using Jquery Name attribute使用 Jquery Name 属性从动态生成的元素中检索值
【发布时间】:2015-09-28 16:34:28
【问题描述】:

我有一个 mvc cshtml 表单,我使用以下语法生成多行:

foreach (var i in Model)
   {            
    <td>
     @Html.TextBoxFor(a => a[j].SFDCID, new { id = "SFDCID", @class ="SFDCID" })
    </td>
   }

这是生成的 HTML sn-p 类似:

 <input class="SFDCID" id="SFDCID" name="[0].SFDCID" type="text" value="">
    <input class="SFDCID" id="SFDCID" name="[1].SFDCID" type="text" value="">
.....
.....

现在我想检查用户是否在所有 SFDCID 字段中输入了值,那么只有表单提交应该发生,否则应该抛出验证消息。

为此,我尝试使用其名称属性访问该值并编写了以下代码:

           for (var i = 0; i <= totalNumberOfRows; i++) {

                var elementName = '[' + i + '].SFDCID';    
                if ($("[name = elementName]").val() == "" || 
                                     $("[name = elementName]").val() == undefined) 
                {
                        ConsolidatedErrorMsg = "SFDC ID is a Mandatory field.";
    }
}

我尝试使用类、id 和名称作为选择器来获取值,但在前两种情况下,它仅适用于第一行。 使用名称选择器,如果我硬编码元素名称,例如“[0].SFDCID”和“[1].SFDCID”,则它适用于两个名称,但是当我用 0 和 1 替换 i 时,它不起作用。

请帮助我纠正我在此选择器中遇到的任何语法错误。

【问题讨论】:

    标签: javascript jquery asp.net-mvc asp.net-mvc-4 jquery-ui


    【解决方案1】:

    $("[name = elementName]") 实际上是选择名称为elementName 的所有元素。您实际上需要转义方括号并连接您构造的值:

    var elementName = '\\[' + i + '\\].SFDCID';
    $("[name='" + elementName + "']")
    

    更好的方法是使用 ends with 选择器:

    $("[name$='\\.SFDCID']").each(function() {
        // this here refers to the found element
        var $this = $(this);
        if ($this.val() === "" || typeof($this.val()) === undefined) {
            ConsolidatedErrorMsg = "SFDC ID is a Mandatory field.";
        }
    })
    

    一些旁注。请删除id = "SFDCID" 位,因为页面上的重复 ID 可能会导致行为不一致。并考虑使用内置方法来验证必填字段。

    【讨论】:

    • 感谢 Andrei 指出这里的缺陷。我想使用内置的必填字段验证器,但是这个 SFDCID 文件会根据其他一些属性值更改其行为(强制或可选)。我本可以使用 RequiredIf 属性或重写 Validate() 方法,但这些方法不提供客户端验证选项。所以最后只好选择jquery的方式进行验证。
    • 如果你知道任何更好的内置验证器方法,请帮我提供线索。提前谢谢。
    • @Biki,如果您实现了IClientValidatable[RequiredIf] 属性确实提供客户端验证。看看foolproof,虽然它更容易编写你自己的 - 参考this article
    • @Stephen:+1 链接也有助于实现客户端验证。谢谢
    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 2018-11-16
    • 2012-06-16
    • 1970-01-01
    • 2014-03-15
    • 2014-10-02
    • 1970-01-01
    • 2013-12-09
    相关资源
    最近更新 更多