2012-12-06 77 views
0

計劃:PHP的while循環與JS變量

基本上我有一組存儲在表中服裝項目每個都包含「ITEM_NAME」「ITEM_ID」和「item_shortcode」我希望能有每服鏈接項,當用戶點擊鏈接時需要添加到陣列(所選陣列)


我想基於關閉以創建一個JavaScript對象,我從MySQL數據庫收集的數據的項目,然後將該數據傳遞給一個函數,當div被點擊到我的方法。

這是一個例子:

<?php 
    while($row = mysql_fetch_array($results)){ 
?> 

<script> 
    var item = new Object(); 
    item.itemName = <?php echo json_encode($row['item_name']); ?>; 
</script> 

<?php 
      echo "<div id=\"".$row['item_name']."\" class=\"choice\" onclick=\"SetSelectedChoice(item);\">"; 
      //echo $row['item_name']; 
      echo "</div>"; 
     } 
    } 
?> 

編輯:這只是一個例子,我將我的填充物有大量的數據,而不僅僅是ITEM_NAME

問題是最後一個對象似乎是分配給while循環中的每個div。

有人指出我要去哪裏錯了嗎?

+0

好了,把你的名字加上引號或者你可能最終與item.itemName =有些長字符串,將造成可怕的錯誤; –

+1

此外,如果沒有人會因此而吼你 - 你應該切換到PDO或mysqli。mysql_函數已被棄用,並將很快被徹底清除。 –

+0

gah不知道mysql函數是否需要被取代! –

回答

0

您在每次迭代中重新定義項目。爲什麼不這樣做:

按編輯,你可以創建一個項目數組,並在循環填充它:

<script type="text/javascript"> 
    var objects = new Array(); 
</script> 

<?php while($row = mysql_fetch_array($results)): ?> 
    <script type="text/javascript"> 
     var item = new Object(); 
     item.itemName = '<?php echo json_encode($row['item_name']); ?>'; 
     objects.push(item); 
    </script> 
    <div id="<?php echo $row['item_id']; ?>" class="choice"> 
      <?php echo $row['item_name']; ?> 
    </div> 
<?php endwhile; ?> 

然後在循環的JS OUTSIDE:

$('.choice').on('click', function(){ 
    SetSelectedChoice($(this).html()); 
}); 

function SetSelectedChoice(name) 
{ 
    for(var i = 0; i < objects.length; i ++) 
    { 
     if(objects[i].itemName == name) 
     { 
      //do something 
     } 
    } 
} 

注:我不會真的推薦這種比較名稱的怪異循環。我只是不知道你將這個名字傳遞給這個函數還做了什麼。我會傳遞項目ID或索引值,並直接訪問數組中的項目而不是循環。合理?

基本上,停止使用onclick。整個世界更傾向於傾聽者。其次,根本不需要創建對象。你似乎沒有使用它,即使你這樣做了,你也沒有在名稱周圍加單引號,就像你應該用字符串。第三,請打破php來寫html。它只是更乾淨,更容易。更重要的是,將項目的ID分配給ID參數。在元素的ID中有名稱和空格變得非常難看。而且你並不是真的需要它,因爲你沒有在你的例子中使用它。無論如何,我把它放在那裏,以防你想在點擊監聽器中訪問它,如$(this).attr('id')

但是,如果我忽略了一點,也許你可以澄清,我可能會更新,以更好地滿足您的需求

+0

感謝回覆,請檢查編輯,我有大約5個字段,我將填充該對象。 –

+1

已更新爲更符合您的需求,雖然這應該仍然有一點清理。 –

0

好了,我真的不知道,如果我真的有你,但是如果我看到它,然後您只需在while循環的每次運行中覆蓋項目對象。 在最後一個循環之後(在輸出之後),變量「item」被設置爲循環的最後結果,因此單擊任何div將返回「item」 - 循環的最後一項。

作爲一個解決方案,試圖在div作爲參數保存行的名稱,如

echo "<div id=\"".$row['item_name']."\" class=\"choice\" onclick=\"SetSelectedChoice(\'".$row['item_name']."\');\">"; 
+0

感謝您的回覆,請檢查編輯,我有大約5個字段,我將填充該對象。 –

+0

我不知道這是如何通過覆蓋或通過處理參數中的項目(如我的示例中)或通過檢索信息的附加函數來更改問題的原因,如Kai的示例中所述。 –