Jquery辅助函数与复选框foreach

时间:2017-10-11 20:15:55

标签: jquery checkbox foreach

我有一些复选框,我试图通过使用jquery辅助函数来获取值。

<div class="checkbox">
<label>
<input name="gift_wrap" value="Wrap" type="checkbox"> Gift wrap
</label>
<label>
<input name="gift_wrap" value="Wrapper" type="checkbox"> Wrapper
</label>
<label>
<input name="gift_wrap" value="Pap" type="checkbox"> Pap
</label>
</div>

这是Jquery:

_getContent: function (elm) {
        if(elm.is(":checkbox, :radio")){
            return elm.is(":checked") ? elm.map(function(){
            return $(this).val()}) : '';
        } else {
            return elm.text();
        }
        return '';
    }

这就是它的召唤方式:

_getProductDetails: function (elm) {
        var mi = this;
        var p = {};
        elm.parents(this.options.productContainerSelector)
            .find(this.options.productElementSelector)
            .each(function() {
                if ($(this).is('[name]') === true || typeof $(this).data('name') !== typeof undefined) {
                    var key = $(this).attr('name') ? $(this).attr('name') : $(this).data('name'); 
                    var val = mi._getContent($(this));
                    if(key && val){
                        p[key] = val;    
                    }
                }
            });
        return p;
    }

我得到此[object Object]而不是值。我不是很擅长Jquery并且不完全确定如何去做,我也尝试.each但没有取得多大成功。

2 个答案:

答案 0 :(得分:2)

jQuery的.map()方法返回函数结果的jQuery集合,而不是数组。您可以使用.get()将其转换为数组。

但似乎没有理由首先致电.map()。如果已经选中,只需返回元素的值。

_getContent: function (elm) {
    if(elm.is(":checkbox, :radio")){
        return elm.is(":checked") ? elm.val() : '';
    } else {
        return elm.text();
    }
}

答案 1 :(得分:0)

.map是要在数组上调用的函数。我假设你正在通过一个输入。这将有效(修改为使其在片段中工作)

此外,最后一次回归永远不会开火。所以这是一个解决方案:

_getContent=  function (elm) {
        if(elm.is(":checkbox, :radio")){
            return elm.is(":checked") ? elm.val() : '';
        } 
        return elm.text();
       
    }
    
    console.log(_getContent($('input').eq(1)))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="checkbox">
<label>
<input name="gift_wrap" value="Wrap" type="checkbox"> Gift wrap
</label>
<label>
<input name="gift_wrap" value="Wrapper" type="checkbox" checked> Wrapper
</label>
<label>
<input name="gift_wrap" value="Pap" type="checkbox"> Pap
</label>
</div>