2012-12-29 34 views
0

我有元素一個PHP foreach循環內部的jQuery函數

現在的PHP數組我想爲每個數組元素的鏈接或按鈕,點擊後,該數組值應該出現內部一個特定的div。

這裏是我的代碼:

<?php 
$array = array('apple', 'banana', 'orange'); 
foreach($array as $element) { 
?> 
    <a href="#" onclick="return false;" id="showElement"><?php echo $element; ?></a><br /> 
    <script type="text/javascript" charset="utf-8"> 
    $(document).ready(function(){ 
     $("#showElement").click(function() { 
      $("#hot").append('<?php echo $element; ?><br />'); 
     }); 
    }); 
    </script> 

    <?php 
    } 
    ?> 
    <div id="hot"></div> 

這只是不工作我想它喜歡的方式。它顯示每個數組元素的單獨鏈接,但是當我點擊第一個數組元素時,它只顯示所有三個數組元素,而不是僅僅顯示所需的數組元素。其他兩個鏈接什麼都不做。

任何幫助將不勝感激球員,我的方法甚至可能是完全錯誤的方式來做到這一點,所以請帶領我正確的方式。

謝謝

+0

重用多個元素一樣'id'是不允許的。如果您需要將數據從PHP傳遞給JS,請使用'<?php echo json_encode($ value); ?>'而不是''<?php echo $ value; '>'(介意引號)。 – DCoder

+0

使用PHP或JavaScript來生成數據。你不能混用這種服務器端和客戶端語言。 – Blender

回答

1

關於什麼:

<?php 
$array = array('apple', 'banana', 'orange'); 
$i=0; 
foreach($array as $element) { 
    echo '<a href="#" class="showElement" id="showElement'.$i.'">'.$element.'</a><br />'; 
    $i++; 
} 
?> 

然後

<script type="text/javascript" charset="utf-8"> 
$(document).ready(function(){ 
    var $target = $('#target'); 
    $(".showElement").click(function(e) { 
     e.preventDefault(); 
     $target.append($(this).text()); 
    }); 
}); 
</script> 
+0

當您使用jQuery創建點擊處理程序時,添加內聯'onclick'的意義何在?混合突兀和不顯眼的腳本沒有意義 – charlietfl

+0

@charlietfl你是對的,我寫下了OP onclick =「return false;」但可以刪除它,謝謝 –

+0

從jQuery clcik處理程序返回'false'雖然 – charlietfl

5

我不知道你想要實現什麼,但你應該分開關心[即不要讓PHP至少直接與js混淆]。

考慮通過data-*屬性注入你的價值觀,後來又通過jQuery檢索它們是這樣的:

<?php foreach($array as $element): ?> 

    <a href="#" class="yourClass" data-value="<?php echo $element; ?>"><?php echo $element; ?></a> 

<?php endforeach; ?> 

<div id="target"></div> 

<script> 

$(function(){ 

    var $target = $('#target') 

    $('.yourClass').click(function(e){ 

     e.preventDefault() 

     $target.append($(this).data('value')) 

    }) 

}) 

</script> 

記住那麼id屬性應該是唯一的,而不能在整個DOM重複。

+0

我向你提出了最合理的答案,但是你引入了一個不必要的全局變量'$ target',缺少結尾分號而不是轉義'$ element'。 – DCoder

+1

'$ target'被緩存爲了不需要每次點擊[雖然我可以聲明它是本地的,yep],結尾[分號是可選的](http://mislav.uniqpath.com/2010/05/semicolons/ ),以及逃避你是對的,但這個例子是如此香草,我不想進一步 - 如果內容需要轉義,我不會將東西附加到DOM。不管怎樣,謝謝你! – moonwave99

+0

+1用於保存數據值 –

1

試試這個

<?php 
$array = array('apple', 'banana', 'orange'); 
foreach($array as $element) { 
?> 
    <a href="#" onclick="return false;" id="showElement-<?php echo $element; ?>"><?php echo $element; ?></a><br /> 
    <script type="text/javascript" charset="utf-8"> 
    $(document).ready(function(){ 
     $("#showElement-<?php echo $element; ?>").click(function() { 
      $("#hot").append('<?php echo $element; ?><br />'); 
     }); 
    }); 
    </script> 

    <?php 
    } 
    ?> 
    <div id="hot"></div> 

的問題是,你要綁定相同的ID對您的附加功能。我改變了你的ID名字。你可以簡單地改變他們使用

$("#showElement-<?php echo $element; ?>") 

所以他們得到一個不同的id名稱無論如何。

+0

非常感謝!這有助於很多:) –