2012-10-18 75 views
0

分配ID,因爲我沒有ID attr值,直到我執行的PHP代碼我的很多PHP代碼創建了一個動態的ID選擇,所以,我發現自己正在一個更好的想法快捷方式並將jquery javascript代碼作爲正在創建的ID的名稱。如何動態地使用JavaScript和PHP

所以我想知道是否有其他方法可以做得更好。我目前的方法有效,但我知道這是不好的做法。

爲了說明我在做什麼:

for ($x=0;$x>=10; $x++){ 
echo "... 
    <script> 
    $(function() { 
    $(\"#dialog{$x}\").dialog({ 
     autoOpen: false, 
     show: \"blind\", 
     hide: \"explode\" 
    }); 
    $(\"#opener{$x}\").click(function() { 
     $(\"#dialog{$x}\").dialog(\"open\"); 
     return false; 
    }); 
    </script> 
    ..."; 


    echo "<a id=\"opener{$x}\"> View Notes</a>"; 
    echo "<div id=\"dialog{$x}\">some data also dynamically generated depending on value of $x</div>"; 
} 
+0

你的代碼看起來很好。 – Anoop

+0

你可以改變javascript,不需要創建10個函數,但我想這是可選的。 – Ms01

+0

可能要發佈這http://codereview.stackexchange.com/ – j08691

回答

1

您應該使用類和數據屬性編寫HTML標記。

例如:

<a href="#" class="opener" data-id="1">View Notes</a> 
<div class="notes" data-id="1">My notes here</div> 

<a href="#" class="opener" data-id="2">View Notes</a> 
<div class="notes" data-id="2">My other notes here</div> 

然後寫你的JavaScript採取的使用類選擇選項數組。

$('.notes').dialog({ 
    autoOpen: false, 
    show: "blind", 
    hide: "explode" 
}); 

$('.opener').click(function(e) { 
    $('.notes[dataId==' + $(this).data('id')).dialog('open'); 
    e.preventDefault(); 
}); 
1

我會說,改變javascript並把它放在循環外。

而不是把一個唯一的ID,你可以把它作爲一個類:

echo "<a id=\"opener{$x}\" class=\"myclass\"> View Notes</a>"; 

再往前的JavaScript外循環,只是把它打印出來一般。

<script> 
    $(function() { 
    $('.myclass').dialog({ 
     autoOpen: false, 
     show: "blind", 
     hide: "explode" 
    }); 
$('.myclass').click(function() { 
     $(this).dialog("open"); 
     return false; 
    }); 
</script> 

我希望你得到我的漂移。但是,如果有什麼特別的,你爲什麼使用ID的話,你的代碼是好的。

編輯:如果這是你的所有代碼,並且你決定用類代替,你將不需要一個循環來把所有的ID都輸出。但是如果你想在以後用這個ID做點什麼,它可能會派上用場。就像通過ajax post請求發送給服務器端一樣。

0

WordPress處理JavaScript本地化的方式是使用內聯SCRIPT標籤來設置變量,然後在外部JS文件中引用該變量。這樣可以防止將整個腳本放在內聯中,同時允許在PHP和JavaScript之間傳遞數據。由於變量是全局聲明的,因此可以使用此方法將總數傳遞給外部文件中的JS腳本。

爲了您的例子中,你將內嵌腳本更改爲類似:

<script> 
    var dialog_count = 10; 
</script> 

這臺可用的對話框的數量,並移動對話框功能到一個JS文件。您需要更改函數以獲取要註冊的索引參數,然後迭代調用此函數的每個索引,以使用dialog_count值作爲總數來註冊每個索引。

相關問題