我有一个在页面上创建少量表单的循环。以下是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字段,则该行无法识别它们的值。
知道我做错了吗?
谢谢!
答案 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上单独访问那些空字段并且不会覆盖表单开头的输入。