如何使用JQuery选择隐藏的表单字段值作为隐藏表单字段值数组的一部分?

时间:2012-01-27 01:55:04

标签: jquery html hidden-field

我无法选择隐藏的表单字段值,该值是具有相同名称的隐藏表单字段值数组的一部分。这是数组的一个元素:

<input data-val="true" data-val-number="The field ProductId must be a number." data-val-required="The ProductId field is required." id="OrderItemViewModels_2__ProductId" name="OrderItemViewModels[2].ProductId" type="hidden" value="3" />

我尝试在JQuery中以几种不同的方式选择它,例如:

$('#OrderItemViewModels[2].ProductId').val());

和..

$('#OrderItemViewModels\\[2\\].ProductId').val());

两者都没有效果。我也尝试过其他一些方法。所以,我尝试了下面的一些建议,希望只在警报中打印这些值。我试过这些:

alert('valueDirect2=' + $('#OrderItemViewModels_2__ProductId')).val();
alert('valueDirect1=' + $('input[name="OrderItemViewModels[2].ProductId"]')).val();

这导致在两种情况下都打印valueDirect2 = [Object object]。为什么?这有什么不对?

我对如何获得这些价值感到茫然。有什么帮助吗?

2 个答案:

答案 0 :(得分:4)

您是否需要动态,即动态更改input字段被选中?如果是这样,您需要在选择器的中间添加一个变量。

如果您像这样修改现有代码,它将起作用:

$('#OrderItemViewModels_2__ProductId').val();

您的两个示例无效,因为您正在格式化选择器字符串,类似于name属性,但#前缀告诉jQuery查找id属性。

也可以按名称选择元素,如下所示:

$('input[name="OrderItemViewModels[2].ProductId"]').val();

在您的alert示例中,您看到[Object object],因为jQuery中的$语法是调用jQuery函数的快捷方式。你真正在做的是:

jQuery('input[name="OrderItemViewModels[2].ProductId"]').val();

这只是一个简单的旧函数调用。 S是一种方便的简写。你正在调用一个函数并传入一个字符串,这是jQuery将评估的选择器。

你的选择器没有返回任何东西,因为它格式不正确,所以你最终打印了jQuery函数本身的.val()或值。在你对jQuery的工作方式有一个很好的概念性把握之前,这有点令人困惑。

要使选择器动态化,只需将字符串拼接在包含要选择的input编号的变量周围:

$('input[name="OrderItemViewModels[' + myVariable + '].ProductId"]').val();

这是一个jsFiddle,说明了这两个选项。

答案 1 :(得分:0)

$('input[name="OrderItemViewModels['+ index +'].ProductId"]').val(); // index = 0,1,2...

OR

$('#OrderItemViewModels_'+ index +'__ProductId').val(); // index = 0,1,2...