Jquery - 从动态创建的输入中获取值

时间:2013-04-26 22:08:49

标签: jquery forms

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

我有一个表单,你可以填写测验的答案替代品,但在这里你也可以用新的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+''];

我理解如果要求所有这些帮助是很多的,但有点总比没有好。)

谢谢!

3 个答案:

答案 0 :(得分:8)

编辑:

在此代码中,您没有正确使用上下文。 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中提取数据。

答案 1 :(得分: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);
});

答案 2 :(得分:0)

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

$('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);
});