我有一些复选框,我试图通过使用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
但没有取得多大成功。
答案 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>