2017-03-15 22 views
0

私はいくつかのjavascriptをコーディングして、 'basket'にピザを追加することを任されています。私はピザの名前、説明、サイズ、価格を取得する必要がある 'バスケットに追加'ボタンを持っています。Javascript選択したラジオボタンの値を取得

現在、私は「Add to Basket」ボタンからピザの名前と説明を取得できましたが、ユーザーが選択するラジオボタンから決定されるピザの価格とサイズを取得する必要があります。

htmlコードが私に与えられました。ここで

<td> 
    <table border="0" cellpadding="0"> 
     <tbody> 
      <tr align="center"> 
       <td> 
        <input id="size" name="Cheese" data-price="6.50" value="Small" type="radio" checked>Small 
       </td> 
       <td> 
        <input id="size" name="Cheese" data-price="8.50" value="Medium" type="radio">Medium 
       </td> 
       <td> 
        <input id="size" name="Cheese" data-price="9.99" value="Large" type="radio">Large 
       </td> 
      </tr> 
      <tr align="center"> 
       <td style="padding-top: 6px">£6.50</td> 
       <td style="padding-top: 6px">£8.50</td> 
       <td style="padding-top: 6px">£9.99</td> 
      </tr> 
     </tbody> 
    </table> 
</td> 
<td> 
    <input id="addbasket" name="Cheese" data-description="Mozzarella cheese" value="Add to Basket" type="button" onclick="addBasket(this)"> 
</td> 

はjavascriptのですが、私はまた、配列にNodeListオブジェクトに変換してから、私は最初の2行で行っていると思いますどのチェックされているラジオボタンを取得するためにその配列によってフィルタリングするように頼まれました。

function addBasket(button) { 
    var nodes = [].slice.call(document.getElementsByName(name)); 
    var radio = nodes.filter(function(el){return el.checked;})[0]; 

    var pizzaname = button.name; 
    var pizzadesc = button.getAttribute('data-description'); 

    var pizzaprice = radio.dataset.price; 
} 

ラジオボタンから「データ価格」と「値」(ピザのサイズ)を取得する方法がわかりません。

答えて

0

ピザの価格を得るにはradio.getAttribute('data-price')を使用し、ピザのサイズを取得するにはradio.valueを使用できます。また、[].slice.callの使用を避けるには、NodeListに[].filter.callを使用してください。

var name = 'Cheese' 
 

 
function addBasket(button) { 
 
    var nodes = document.getElementsByName(button.name) 
 
    var radio = [].filter.call(nodes, function(e) { 
 
    return e.checked 
 
    })[0] 
 

 
    var pizzaname = button.name 
 
    var pizzadesc = button.getAttribute('data-description') 
 

 
    var pizzasize = radio.value 
 
    var pizzaprice = radio.getAttribute('data-price') 
 

 
    console.log({ 
 
    Name: pizzaname, 
 
    Description: pizzadesc, 
 
    Size: pizzasize, 
 
    Price: pizzaprice 
 
    }) 
 
}
<td> 
 
    <table border="0" cellpadding="0"> 
 
    <tbody> 
 
     <tr align="center"> 
 
     <td> 
 
      <input name="Cheese" data-price="6.50" value="Small" type="radio" checked>Small 
 
     </td> 
 
     <td> 
 
      <input name="Cheese" data-price="8.50" value="Medium" type="radio">Medium 
 
     </td> 
 
     <td> 
 
      <input name="Cheese" data-price="9.99" value="Large" type="radio">Large 
 
     </td> 
 
     </tr> 
 
     <tr align="center"> 
 
     <td style="padding-top: 6px">£6.50</td> 
 
     <td style="padding-top: 6px">£8.50</td> 
 
     <td style="padding-top: 6px">£9.99</td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
</td> 
 
<td> 
 
    <input id="addbasket" name="Cheese" data-description="Mozzarella cheese" value="Add to Basket" type="button" onclick="addBasket(this)"> 
 
</td>

+0

私はのエラー取得しています「キャッチされない例外TypeErrorを:addBasketで未定義のプロパティ 『値』を読み込めません」pizzasize変数のため。 pizzaprice変数のエラーも "Uncaught TypeError:addBasketで未定義のプロパティ 'getAttribute'を読み取れません。私がしてきた1つのテストは、alert(pizzaprice)を使用して、smallのラジオボタンがチェックされている場合に「6.50」が表示されているかどうかを確認することですが、「未定義」と表示されます。 –

+0

私は上に投稿したスニペットを実行してみましたか(私のコンピュータ上で動作します)、あなたとコードを比較しましたか? – gyre

+0

私はもう一度それを入れて、期待どおりに動作しますので、ありがとうございます。私は別のピザを追加しましたが、それぞれに「Add to Basket」ボタンがあり、そのonclickに同じ「addBasket」機能が呼び出されました。これらのボタンを押すと、彼らはすべて私に最初のピザの値を与えている。クリックされたボタンに対応するピザの値を取得する方法に関するアイデアはありますか?名前と説明は期待通りに機能していますが、価格とサイズはリストの最初のピザから選択した値です。 –

関連する問題