7

我一直在尝试创建一个“测验生成器”。

我有一个表格,您可以填写测验的答案选项,但在这里您也可以动态创建具有新 ID 的新字段。

因此它使用 id txtAnswer1、txtAnswer2 等创建新输入。

这是获取值的(不工作的)代码:

    $("#AddNewQuiz").click(function () {
    var NewQuizAlts = $("#txtAnswer").val();
    var NewQuizQuestion = $("#NewQuizQuestion").val();
    var init = { 
        'questions': [ 
        {
       'question': NewQuizQuestion,
       'answersAlts': [NewQuizAlts,'Two','Three','Four'],
          'correctAnswer': 1
          } 
          ]
    }   

你在这里看到它只获得静态的第一个值。但我想获得在“循环”或其他东西中创建的所有值。

有人有什么想法吗?

谢谢!


感谢您的回答!

但我无法让它工作!

我试过这个:

    $('input[id^="txtAnswer"]').each(function(input){
        var value = $('input[id^="txtAnswer"]').val();
        var id = $('input[id^="txtAnswer"]').attr('id');
        alert('id: ' + id + ' value:' + value);
        });

但只给我最后一次创建的输入的警报(4次)。有什么问题?

事情是,这就是我想要实现的目标:

1.) 使用上面的代码获取所有创建的输入的列表。

2.) 将它们放在一个逗号分隔的列表中,其值如下:

    QuestionAlts = [''+Alt1+'',''+Alt2+'',''+Alt3+''];

3.) 并且让它根据创建的输入数量在列表中生成更多备选方案,所以如果我创建了 5 个备选方案,它将是:

    QuestionAlts = [''+Alt1+'',''+Alt2+'',''+Alt3+'',''+Alt4+'',''+Alt5+''];

我知道在这一切上寻求帮助是否很多,但有一点总比没有好:)

谢谢!

4

3 回答 3

13

编辑:

在此代码中,您没有正确使用上下文。http://api.jquery.com/jQuery.each/

$('input[id^="txtAnswer"]').each(function(input){
        var value = $('input[id^="txtAnswer"]').val();
        var id = $('input[id^="txtAnswer"]').attr('id');
        alert('id: ' + id + ' value:' + value);
});

在您.each的 中,传递给函数的是您使用选择器拉出的数组中的一个项目。当您设置时value = $('input...,您将再次拉动相同的数组。

使用.each,这样:

$('your selector').each(function(index, item){
    var val = $(item).val();
    var id = $(item).attr('id');
    ...
});

除非您需要有 id 的答案,否则为什么不使用 data-* 属性将它们表示为答案呢?您可以像这样标记每个:

<input data-type="answer"/>

然后以这种方式将它们全部拉出:

$('input[data-type="answer"]')

这样做可以消除对需要确保每个动态 id 都是唯一的担忧,如果它们不重要的话。我有一个为工作创建的数据过滤器,它在页面加载后动态创建元素,并且以这种方式从 DOM 中提取数据没有问题。

于 2013-04-27T20:50:21.577 回答
3

你可以这样做:

$('input').each(function(input){
   var value = $(input).value();
   var id = $(input).attr('id');
   console.log('id: ' + id + ' value:' + value);
});

尝试这个:

$('input[id^="txtAnswer"]').each(function(input){
    var value = $(this).val();
    var id = $(this).attr('id');
    alert('id: ' + id + ' value:' + value);
});
于 2013-04-26T22:11:43.630 回答
1

如果您只想循环输入,请尝试以下操作:

$('input').each(function() { alert(this.val()); });

这将遍历页面上的每个输入字段。

您可以通过定义 [type=text] 甚至使用正则表达式来进一步过滤它以获取以某些 Id 开头的某些文本字段(例如,“匹配任何 ID 以“txtAnswer”开头的文本字段,后跟一个数字)。

尝试这个:

$('input[id^="txtAnswer"]').each(function(input){
    var value = $(this).val();
    var id = $(this).attr('id');
    alert('id: ' + id + ' value:' + value);
});
于 2013-04-26T22:15:40.347 回答