获取.each()中元素的子输入的属性在另一个.each()中

时间:2011-12-16 01:19:41

标签: jquery

我在这里的第一篇文章。我不是JQuery的新手,但我发现复杂的编码非常困难(当然!)。我会尽可能清楚地解释我的问题。我正在使用 elgg ,所以这里的一些代码将是elgg特定的。那不是问题。

我正在创建一个页面,允许我的用户向某些内容添加问题。他们可以使用以下方法添加问题:

echo "<div id='ques_holder'>";
echo "<table><tr><td style='width:380px;padding-right:10px;'>";
    echo "<b>Question:</b> ";
    echo elgg_view("input/text", array('internalname' => 'ques_','internalid' => 'ques_'));
echo "</td><td style='width:90px;'>";
    echo "<b>Answer:</b> ";
    echo elgg_view("input/pulldown", array('internalname' => 'ans_','internalid' => 'ans_', 'options_values' => array('true' => 'True', 'false' => 'False')));
echo "</td></tr></table>";
echo "</div>";

我现在希望能够一次添加多个问题,因此我使用以下克隆代码来完成此任务:

var quescount = 0;

function add_question() {
quescount++;
var clone = $("#ques_holder").clone(false);
$("*", clone).add(clone).each(function() {
    if (this.id) {
        this.id = this.id + quescount;
    }
    if (this.name) {
        this.name = this.name + quescount;
    }
});
$("#interact_input_questions_adder").append(clone);
}

这一切都很好。添加了新问题,并使用数字(问号)及其子元素更新其ID和名称。问题来自以下部分。 我正在尝试将所有输入名称和值组合在一起,以便通过ajax发送到php文件。这是我的代码破解的地方。我正在尝试一个双.each()调用(一个在另一个内),但我的编码中的某些东西不起作用。代码如下:

function save_questions(){
    var qrange = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
    var activity = "<?php echo $activity;?>";
    datastr = "&activity=" + activity;
    jQuery.each(qrange , function(index,value){
        $("#ques_holder"+value).find('input').each(function(){
            datastr += $(this).attr('name');
        });
    });
    alert(datastr);
}

需要考虑的事项
每次输入的输入类型都可能发生变化(我给出的输入只是一个例子)
elgg编码不会破坏事物 qrange 数组只是为了限制问题的数量(我还没有把它添加到add_question()函数中)

我想我想知道的是......你能在jQuery.each()里面做一个.each(),根据我的编码,我怎样才能得到所有这些输入的名字在每个电话里面?

任何帮助非常感谢。不要害怕因为我的丑陋编码而嘲笑我,我通过stackoverflow等网站的试错来自学。 ;)

编辑:经过严厉的面部护理后,我意识到错误是因为我不应该使用“onclick”。最后的内容如下,实际上由 RightSaidFred 提供,由于某种原因,他们删除了他的答案。

function save_questions(){
    var qrange = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
    var activity = "<?php echo $vars['activity'];?>";
    datastr = "&activity=" + activity;
    jQuery.each(qrange , function(index,value){
        $("#ques_holder"+value).find('input').each(function(input_idx, input){
            datastr += "&" + $(input).attr('name') + "=" + $(input).attr('value');
        });
    });
    alert(datastr);
}

1 个答案:

答案 0 :(得分:0)

为什么不给全部的问题&#39; divs,例如

  <div id='ques_holder' class='holder'>

然后,你只需要分别做一个来获取所有输入

 $("div.holder input").each(function() {
      var name = $(this).attr('name'); // if you need the name
      var val = $(this).val();   // if you need the value
      var parent = $(this).closest('div.holder').attr('id'); // if you need to know the parent number
});