1

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

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

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

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

有趣的是,有一个属性“b.value”完全符合我的期望,但我不知道它是否像 jquery 方法通常那样跨浏览器兼容。

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

任何想法将不胜感激!

谢谢..-本

4

3 回答 3

2

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

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

小提琴

于 2013-06-16T03:04:52.153 回答
2

您需要将其包装起来$()才能使用val(). val() 不是 DOM 元素上的有效方法,但正如您所提到的,您不需要这样做,而是可以只使用.valueDOM 元素的属性。

$("#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');
});
于 2013-06-16T03:06:33.640 回答
1

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

试试$(b).val()吧。

于 2013-06-16T03:05:52.840 回答