迭代选择集合(jquery)时val()失败

时间:2013-06-16 03:02:43

标签: jquery loops

我有一个包含多个元素的表单,我想迭代它们,并将所选元素(在每个个体中)的值与字符串进行比较。好像我想要使用val(),但是......

$("#FormSection select[class='input-small']").each(function (a, b) {
    if (b.val()!="test") 
                alert('hello');
});

在上面,它说“val”是未定义的。但是b.id确实等于其中一个选择元素。

如果我直接使用jquery直接获取相同的select元素,则val()按预期工作。所以,我将循环内的b与直接抓取的选择进行了比较。差异:当直接抓取时,jQuery返回一个单元素数组。关于val()的文档提到它需要一个数组,所以也许这是预期的。

有趣的是,有一个属性“b.value”正是我所期望的,但我不知道它是否与jquery方法通常的跨浏览器兼容。

我很难找到这个,因为我的关键字返回了有关允许多选的s的结果。

任何想法都会非常感激!

谢谢.. -ben

3 个答案:

答案 0 :(得分:2)

你只需要将b包装为JQuery对象,因为它是一个常规的DOM元素:

if ($(b).val()!="test") 

Fiddle

答案 1 :(得分:2)

您需要将其打包在$()中以使用val()。 val()不是DOM元素的有效方法,但正如您所提到的,您不需要这样做,而只需使用DOM元素的.value属性。

$("#FormSection select[class='input-small']").each(function (idx, b) {
    if (b.value !="test") // b represents DOM Element select, $(b) represents jquery object representing DOM element.

    //if(this.value != test) or just use this. this context here is the element of current iteration.
                alert('hello');
});

答案 2 :(得分:1)

对于初学者,你的选择器应该是"#FormSelection select.input-small",但是.each除了遍历每个项目 - 在这种情况下,jQuery对象的每个元素。这意味着b本身就是<select>元素,因此没有jQuery函数。

请尝试$(b).val()