当响应页面呈现时,它会呈现各种输入字段。我试图把它变成一个列表,使用ajax将被发送回django视图。这是我想用来实现这个的html和javascript。
<div id ='answers'>
{% for q in questions %}
{{q.question.numeric}}
{% if q.question.numeric%}
<div class = 'numeric_answer'>
{{ q.question.question_text }}<br>
<select name="Score">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
</div>
{% else %}
<div class = 'text_answer'>
{{ q.question.question_text }}<br>
<input type="text" class="question_text"/><br>
</div>
{% endif %}
{% endfor %}
</div>
<button id="send">Submit</button>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var button = $("#send");
$(button).click(function() {
var vals = [];
$("#answers :input").each(function(index) {
vals.push(this.val);
});
vals = JSON.stringify(vals);
console.log(vals);
});
});
</script>
目前,无论输入什么内容,我都会得到一个仅包含&#39; nulls&#39;例如[null, null, null]
当我需要像['hey', 'asdasd', 5, 'ásdas']
答案 0 :(得分:1)
问题在于:
$("#answers :input").each(function(index) { vals.push(this.val); });
您需要将循环中的迭代元素作为函数的第二个参数传递,然后使用其value
属性:
$("#answers :input").each(function(index, item) {
vals.push(item.value);
});