页面上的多个表单 - textarea值仅在第一个使用jQuery识别

时间:2011-11-04 20:36:01

标签: forms jquery

我有一个在页面上创建少量表单的循环。以下是PHP中循环创建的样子。这段代码在循环中:

echo '<form class="add_suggested_solution_comment"  method="post">';
echo '<p><textarea class="suggested_solution_comment" cols=65 rows=6 ></textarea></p>';
echo '<input type="hidden" class="problem_id" value="'.$problem_id.'" />';                                                  echo '<input type="hidden" class="suggestion_id" value="'.$suggestion_id.'" />';   
echo '<input type="hidden" class="solution_section_id" value="'.$solution_section_id.'" />'; 
echo '<p><input type="submit" class="button" value="Add Comment"></input></p>';             
echo '</form>';

然后我有jQuery代码获取表单字段的值,如下所示:

$('.add_suggested_solution_comment').live('submit',function()
{   
    var problem_id = $('.problem_id').val();
    var comment = $(".suggested_solution_comment").val();   
    var solution_id = $('.suggestion_id').val();    
    var solution_section_id = $('.solution_section_id').val();      
        ...

问题是如果将文本输入到第一个textarea中,它将被获取注释的行识别:var comment = $(“。suggested_solution_comment”)。val();

但是,如果输入了任何其他textarea字段,则该行无法识别它们的值。

知道我做错了吗?

谢谢!

4 个答案:

答案 0 :(得分:3)

使用jQuery的context参数,如下所示:

$('.add_suggested_solution_comment').live('submit',function()
{   
    var $this = $(this);
    var problem_id = $('.problem_id', $this).val();
    var comment = $(".suggested_solution_comment", $this).val();   
    var solution_id = $('.suggestion_id', $this).val();    
    var solution_section_id = $('.solution_section_id', $this).val();      
    ...

这只会选择当前提交表单中的元素。

答案 1 :(得分:2)

使用id明确标识文本区域不是更好吗,因为您有可以使用的问题ID?否则,你试图从具有任意数量匹配的类选择器中获取单个val()。

(同样的事情适用于您没有唯一识别的其他字段。)

我想,您可以找到表单元素的匹配子元素,而不是整个DOM。

答案 2 :(得分:1)

...我建议用ID而不是类生成texareas并使用jQuery相应地访问它们,这样jQ就不会对它处理的textarea感到困惑。

答案 3 :(得分:1)

快速思考:使用id来区分循环中的输入。类似的东西:

for ($i=0; $i<$something; $i++){
...
   echo '<input type="hidden" class="problem_id" id="problem_id_'.$i.'" value="'.$problem_id.'" />'; 
...
}

然后您将能够在迭代x上单独访问那些空字段并且不会覆盖表单开头的输入。