我接受了一项调查,每个可能的回复都是一个复选框,每个问题都分为一个带有ID号的div。我必须创建一个函数,返回选中的复选框并返回int。
<div class="row" id="replies-{{ question.id }}">
{% for reply in func.replies(question.id) %}
<div class="col-md-12">
<div class="btn-group-toggle" data-toggle="buttons" >
<label class="btn btn-block btn-secondary">
<input type="checkbox" autocomplete="off" value="{{ reply.id }}" data-id="{{ reply.id }}" data-question="{{ question.id }}" data-test="{{ question.test }}"> {{ reply.reply }}
</label>
</div>
</div>
{% endfor %}
</div>
这是我写的函数,但当时我得到“未定义”(我在jquery.steps.js
更改步骤时调用此函数。)
function getStepChekboxes(id) {
var selector = '#replies-' + id + ':checkbox:checked';
console.log(selector);
$(selector).each(function() {
if ($(this).data("question") == id) {
return $(selector).val()
}
});
}
此值将在json调用中推送并发送到服务器。
我认为我使用错误的选择器导致我在选中复选框时未定义。
答案 0 :(得分:0)
$(selector).each(function() {
本身就是一个 new 函数 - 当它运行时,如果你在其中return
,你将把值返回给jQuery迭代函数(完全忽略返回值),而不是外部getStepCheckboxes
。
但是你不需要jQuery - 你可以使用vanilla JS。
function getStepChekboxes(id) {
const selector = '#replies-' + id + ':checkbox:checked';
const foundElement = [...document.querySelectorAll(selector)]
.find(element => element.dataset.question === id);
if (foundElement) return parseInt(foundElement.value, 10);
}
答案 1 :(得分:0)
你可以在jquery元素上使用数组的某个函数来在找到它时打破循环。您也可以使用过滤器jquery函数{{3}},但它不会在第一次出现时停止。
function! GoogleSearch()
let searchterm = getreg("g")
exec ":!open \"http://google.com/search?q=" .searchterm . "\" &"
endfunction
vnoremap <F6> "gy<Esc>:call GoogleSearch()<CR>
OR
function getStepChekboxes(id) {
var selector = '#replies-' + id + ':checkbox:checked';
console.log(selector);
var result;
Array.prototype.some.call($(selector),function(el) {
if ($(el).data("question") == id) {
result = el.value
return true
}
});
return result;
}