在循环中使用多个相同的ID并使用jQuery

时间:2011-03-08 09:09:00

标签: jquery

我有一个生成一堆这样的循环:

<textarea id="uar"></textarea>

同一个循环会在每个textarea旁边生成一个提交链接。

该链接将发布此表单:

<form action="php/unApprovePost.php" method="POST" id="unApprovePost">
   <input type="hidden" id="uaid" name="uaid"/>
   <input type="hidden" id="uadc" name="uadc"/>
</form>

我成功填充#uaid,但是当我尝试填充#uadc时,只有循环的第一次迭代才具有功能。我的意思是 - 只有第一个textarea才能正确发布我想要的内容。如果我尝试使用除第一个之外的任何textareas,他们不提交任何东西。我认为这与HTML中ID的唯一性有关。我尝试使用类.uar,但这也不起作用 - 相同的行为。有什么帮助吗?

这是我的jQuery代码:

    $('#unApprovePost').submit(function() {
        $('#uadc').val($('#uar').val());
    });

修改: 有一个动态数量的循环迭代,所以我真的不能像class =“uar1”。我尝试为textareas创建类.uar并使用此jQuery代码:

$('#unApprovePost').submit(function() {
   $('#uadc').val($('.uar').val());
});

但问题仍然存在。

4 个答案:

答案 0 :(得分:2)

您不能拥有多个具有相同id的HTML元素。这是完全错误的,它可能会导致页面中出现一些奇怪的行为。只有第一个textarea工作是完全正常的,因为jQuery将查找给定的id,找到第一个,然后发送表单。

当你总是使用同一个类时,同样的问题,jQuery找到第一个并发送表单。

我建议您为每个textarea使用不同的class(即uar1,uar2,uar3等)

答案 1 :(得分:1)

ID应该在页面上是唯一的。 jQuery / javascript只期望在ID引用时存在一个元素。

使用classname循环元素,以符合您的需要为准。

答案 2 :(得分:0)

$('#uadc')返回ID为uadc的元素。如果您有多个具有该ID的元素,则无法使用。

<input name="uadc"/>将使用密钥uadc将其值提交给服务器。如果您在同一表单中有多个具有相同名称的输入,则它将无效。

答案 3 :(得分:0)

如果你以自己的形式包装每个id和提交它应该有效。这将允许每个提交根据所选提交发送正确的文本区域。

<form action="php/unApprovePost.php" method="POST" id="unApprovePost">
    <input type="hidden" id="uaid" name="uaid"/>
    <input type="hidden" id="uadc" name="uadc"/>
    <input type="submit" id="submit" name="submit"/>
</form>

否则你可以手动建立一个包含所有id的列表,如果你真的想要并发送一个列表。这可能看起来像:

var values = []
$.each($('#uaid'), function(i, item){
    values.append($(item).val());
}

结果将是一个值数组,然后您可以手动将其发布到页面。