我一直试图创建一个“测验生成器”。
我有一个表单,你可以填写测验的答案替代品,但在这里你也可以用新的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+''];
我理解如果要求所有这些帮助是很多的,但有点总比没有好。)
谢谢!
答案 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);
});