2017-05-31 11 views
1

私は現在、うまく動作するPHPスクリプトを持っていますが、JavaScriptを追加する場合は小さな問題があります。複数のforearch結果にJavaScriptレスポンスを追加する方法

私が達成しようとしているのは、うまく動作するPHP foreachループの結果を表示することですが、foreachループの結果と同じ行に結果を表示すると仮定しているonclick JavaScript関数があります代わりに1つの結果のみの現在の値を変更します。

私は現在、価格が4種類の車を持っています。 1つが選択されたら、名前と価格を[echo "Select:"の上に表示します。 $ name]行に移動します。

私の現在のコードはこれです:

<?php 
    $cars = array(
    array("Volvo",40.000), 
    array("BMW",45.000), 
    array("Saab",50.000), 
    array("Land Rover",60.000) 
    ); 

foreach($cars as $key){ 
    $name = $key[0]; 
    $price = $key[1]; 

    echo "<span id='$name'></span> <span id='$price'></span><br />"; 
    echo "Select: " . $name; 
?> 
<script type="text/javascript"> 
    function grabData(d){ 
     document.getElementById("<?php echo $price; ?>").innerHTML = d.getAttribute("data-price"); 
     document.getElementById("<?php echo $name; ?>").innerHTML = d.getAttribute("data-title"); 
    } 
</script> 
<input onclick="grabData(this);" type="radio" name="rate" data-price="<?php echo $key[1]; ?>" data-title="<?php echo $key[0]; ?>"><br /> 
<?php 
} 
?> 

すべてのオプションが選択されているのであれば最終結果は、次のようになります。

Volvo 40 
Volvo: 
BMW 45 
BMW: 
Saab 50 
Saab: 
Land Rover 60 
Land Rover: 

すべてのヘルプや方向が高く評価されています。ありがとう!

+0

価格を表示するスパンのIDとして実際に価格を使用していますか?同じ価格の2台の車をお持ちの場合はどうなりますか? – Barmar

答えて

2

ループは単に同じ機能を何度も繰り返し定義しています。呼び出されると、ループ内のその要素の定義ではなく、最後の定義が呼び出されます。

関数を一度定義し、パラメータを追加するだけです。次に、各要素の異なるパラメータで呼び出すことができます。

<script type="text/javascript"> 
function grabData(d, priceid, nameid){ 
    document.getElementById(priceid).innerHTML = d.getAttribute("data-price"); 
    document.getElementById(nameid).innerHTML = d.getAttribute("data-title"); 
} 
</script> 

<?php 
$cars = array(
       array("Volvo",40.000), 
       array("BMW",45.000), 
       array("Saab",50.000), 
       array("Land Rover",60.000) 
      ); 

foreach($cars as $key){ 
    $name = $key[0]; 
    $price = $key[1]; 

    echo "<span id='$name'></span> <span id='$price'></span><br />"; 
    echo "Select: " . $name; 
    ?> 
    <input onclick="grabData(this, '<?php echo $price; ?>', '<?php echo $name; ?>');" type="radio" name="rate" data-price="<?php echo $key[1]; ?>" data-title="<?php echo $key[0]; ?>"><br /> 
    <?php 
} 
?> 
0

スクリプト部分を変数に文字列として設定し、phpを使用してそれをエコーすると、phpはすべて<?php ?>を別のコーディングブロックとして見ます。

関連する問題