使用Jquery Name属性

时间:2015-09-28 16:34:28

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

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

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

这是生成的HTML代码段,如:

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

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

为此我尝试使用其name属性&amp;来访问该值。写了以下代码:

           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&amp;命名为选择器以获取值,但在前两种情况下,它仅适用于第一行。 使用名称选择器,如果我硬编码元素名称,如“[0] .SFDCID'&amp; '[1] .SFDCID'但当我用0替换i时1,它无法正常工作。

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

1 个答案:

答案 0 :(得分:0)

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

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

更好的方法是使用结尾选择器:

$("[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可能会导致行为不一致。并考虑使用内置方法来验证必填字段。