1

首先,我很难制定我的头衔,所以我很抱歉。无论如何,关于我的问题。

我有一个大信息表,其中一些单元格有表单域,特别是每行有两个表单域。在该行的末尾,我有一个“保存”链接。

有多行,每行都有自己的字段集。

我很难将这两个值存储在一个变量中,因为它们是动态呈现的,我没有一个特定的 id 连接到每个 .

因此,我认为向上遍历 DOM 会产生我的结果,但不,到目前为止,我只是得到“未定义”(我认为我走在正确的道路上,我只是想不通)。

以这段代码为例;

<td>
<select multiple="multiple" name="paintings">
<option value="The Persistance of Memory" selected="selected">The Persistance of Memory</option>
<option value="The Great Masturbator" selected="selected">The Great Masturbator</option>
<option value="The Scream">The Scream</option>
</select>
</td>
<td>
<select name="painters">
<option value="VanGogh" selected="selected">Van Gogh</option>
<option value="Dali">Dali</option>
<option value="Munch">Munch</option>
</select>
</td>
<td>
<a href="#">Save</a>
</td>

当用户单击保存时,所选值应存储在变量中。到目前为止,这是我尝试过的;

$("a").click( function (e){
    str = $(this).find("select[name|='painters']").val() || [];
    alert(str.join(","));

而不是“find”,我还尝试了“parent”、“prev”和“closest”。我也尝试将选择器指定为“select option:selected”。

这适用于获取所有元素或仅一个元素,但是当我试图找到最接近的两个并将其存储在两个不同的变量中时,它将不起作用。

非常感谢任何建议或帮助。谢谢你。

4

1 回答 1

1

您可以使用.map()来获取一组值:(您的不工作,因为find()向下遍历 DOM 树,因为您需要返回到tr,然后find从那里)

$("a").click( function (e) {
    var selectValues = $(this).closest("tr").find("select").map(function() {
        return this.value;
    }).get();
});

给你一个小提琴!http://jsfiddle.net/5tLxk/

编辑:因为你有一个multi-select,你可以在其中嵌套另一个map来获取所有值(小提琴:http: //jsfiddle.net/5tLxk/1/

$("a").click( function (e) {
    var selectValues = $(this).closest("tr").find("select").map(function() {
        return $(this).find("option:selected").map(function() {
            return this.value;
        }).get();
    }).get();

    console.log(selectValues);
});
于 2013-10-15T21:04:46.000 回答