我一直试图创建一个"测验生成器".
我有一个表格,你可以填写测验的答案替代品,但在这里你也可以用新的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
}
]
}
Run Code Online (Sandbox Code Playgroud)
你在这里看到它只获得静态第一个值.但我想得到所有在"循环"或其他东西中创建的值.
任何人都有任何想法?
谢谢!
谢谢你的回答!
但我无法管理它!
我试过这个:
$('input[id^="txtAnswer"]').each(function(input){
var value = $('input[id^="txtAnswer"]').val();
var id = $('input[id^="txtAnswer"]').attr('id');
alert('id: ' + id + ' value:' + value);
});
Run Code Online (Sandbox Code Playgroud)
但只给我提醒(4次)唯一最后创建的输入.有什么不对?
事情是,这是我想要实现的目标:
1.)使用上面的代码获取所有创建的输入的列表.
2.)将它们放在逗号分隔的列表中,其值如下:
QuestionAlts = [''+Alt1+'',''+Alt2+'',''+Alt3+''];
Run Code Online (Sandbox Code Playgroud)
3.)并且还根据创建的输入数量在列表中生成更多替代项,因此如果我创建了5个替代项,它将是:
QuestionAlts = [''+Alt1+'',''+Alt2+'',''+Alt3+'',''+Alt4+'',''+Alt5+''];
Run Code Online (Sandbox Code Playgroud)
我知道如果要求所有这些帮助是很多的,但有点总比没有好:)
谢谢!
在此代码中,您没有正确使用上下文.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);
});
Run Code Online (Sandbox Code Playgroud)
在你的.each,传递给函数的是你用选择器拉出的数组中的一个项目.设置时value = $('input...,您将再次拉出相同的阵列.
用.each这种方式:
$('your selector').each(function(index, item){
var val = $(item).val();
var id = $(item).attr('id');
...
});
Run Code Online (Sandbox Code Playgroud)
除非你需要有id的答案,为什么不使用data-*属性来表示它们作为答案呢?您可以像这样标记每个:
<input data-type="answer"/>
然后以这种方式将它们全部拉出来:
$('input[data-type="answer"]')
Run Code Online (Sandbox Code Playgroud)
这样做可以消除对需要确保每个动态id是唯一的关注,如果它们不重要的话.我有一个为工作创建的数据过滤器,它在页面加载后动态创建元素,我没有问题以这种方式从DOM中提取数据.
| 归档时间: |
|
| 查看次数: |
27758 次 |
| 最近记录: |