2017-10-11 6 views
2

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を試してみた。

+0

ますので、チェックボックスがチェックされている場合は、値を返すと言っしようとしていますか? – Keith

+1

どのようにヘルパーに電話していますか? – Barmar

+0

@Barmarそれは{gift_wrap}を使って追加されました –

答えて

2

jQueryの.map()メソッドは、配列ではなく関数の結果のjQueryコレクションを返します。 .get()を使用して配列に変換できます。

最初に.map()を呼び出す理由はないようです。チェックされている場合は、要素の値を返します。

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

これは私が始めたものですが、ただ1つの値しか取得しません。おそらく{gift_wrap}を印刷するためにforeachが必要でしょうか? –

+0

だからこそ私はあなたがどのように機能を呼び出すのか尋ねました。 'elm'の価値は何ですか? – Barmar

+0

私のコードはうまくいくはずです。 '_getProductDetails()'に '.each()'ループがあるので、 'elm'は' _getContent() 'を呼び出すときにただ一つのチェックボックスになります。取得する値は1つだけです。 – Barmar

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>

関連する問題