jQuery:在div

时间:2018-04-22 20:34:12

标签: javascript jquery

我接受了一项调查,每个可能的回复都是一个复选框,每个问题都分为一个带有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调用中推送并发送到服务器。

我认为我使用错误的选择器导致我在选中复选框时未定义。

2 个答案:

答案 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;
    }