[英]Problems with PHP variables in the URL of a JavaScript function
我正在使用以下腳本來使用彈出窗口加載$ _GET地址:
while ($row1 = $sth1->fetch(PDO::FETCH_ASSOC)){
if($_SESSION['scontact_id'] == 'scontact_id' && $row1['shared_id'] != '' && $row1['shared_id'] != '0'){
echo "<td> <center><button onclick='myFunction()'><img border='0' alt='Contacts' src='/Welcome/modules/mod_crmsearch/images/peoplesmall.png'></button></center>
<script>
function myFunction(shared_id) {
window.open('". $mywebsite . "vcontact_id=" . $row1['shared_id'] ."' +shared_id, '_blank', 'toolbar=no,scrollbars=yes,resizable=yes,top=200,left=500,width=400,height=400');
}
</script> </td>";
但是,它僅正確加載循環中的第一行。 之后,無論while循環中的位置如何,它都會顯示相同的$ _GET地址。 如果我將行轉換為php變量並將PHP變量作為JavaScript變量傳遞給腳本,則其作用相同。 它工作正常,沒有彈出窗口,如下所示:
echo "<td>"."<a href='" . $mywebsite . "vcontact_id=" . $row1['shared_id'] . "' target='_blank', '_blank', 'toolbar=no,scrollbars=yes,resizable=yes,top=200,left=500,width=400,height=400'><center><img border='0' alt='Contacts' src='/Welcome/modules/mod_crmsearch/images/peoplesmall.png'></center></a>" . "</td>";
我對JavaScript不太熟悉。 任何幫助將不勝感激。
每次循環中都會覆蓋myFunction。 您始終可以使用增量計數器重寫代碼以更改函數名稱。 我認為通常最好不要在php中混用javascript。 您總是可以將這些作為附加參數傳遞到輸出php / js的函數中。
您正在不斷重新定義函數: myFunction()
。 您應該在循環外輸出一次腳本標簽,然后將按鈕上的onclick屬性更改為...<button onclick='myFunction(" . $row1['shared_id'] . ")'>...
,如果我正在正確閱讀您的問題
請嘗試以下代碼:
<?php
while ($row1 = $sth1->fetch(PDO::FETCH_ASSOC)){
if($_SESSION['scontact_id'] == 'scontact_id' && $row1['shared_id'] != '' && $row1['shared_id'] != '0'){
echo "<td> <center><button onclick='myFunction(".$row1['shared_id'].")'><img border='0' alt='Contacts' src='/Welcome/modules/mod_crmsearch/images/peoplesmall.png'></button></center></td>";
}
}
?>
<script>
var mywebsite = "<?php echo $mywebsite ?>";
function myFunction(shared_id) {
window.open(mywebsite+"vcontact_id="+shared_id, '_blank', 'toolbar=no,scrollbars=yes,resizable=yes,top=200,left=500,width=400,height=400');
}
</script>
選中此部分:
echo "<td> <center><button onclick='myFunction()'>
為了這:
echo "<td> <center><button onclick='myFunction(\"" . $row1['shared_id'] . "\")'>
編輯:或使其成為一行而不是使用函數:
echo "<td> <center><button onclick='window.open(\"". $mywebsite . "vcontact_id=" . $row1['shared_id'] ."\", \"_blank\", \"toolbar=no,scrollbars=yes,resizable=yes,top=200,left=500,width=400,height=400\");'><img border='0' alt='Contacts' src='/Welcome/modules/mod_crmsearch/images/peoplesmall.png'></button></center></td>";
我相信您只需要將腳本移至if循環之外,而仍將其保留在while循環中,並且需要將函數所需的(shared_id)添加到click事件中。
<?php
while ($row1 = $sth1->fetch(PDO::FETCH_ASSOC)){
if($_SESSION['scontact_id'] == 'scontact_id' && $row1['shared_id'] != '' && $row1['shared_id'] != '0'){
echo "<td> <center><button onclick='myFunction(".$row1['shared_id'].")'><img border='0' alt='Contacts' src='/Welcome/modules/mod_crmsearch/images/peoplesmall.png'></button></center></td>";
}
echo "
<script>
function myFunction(shared_id) {
window.open('". $mywebsite . "vcontact_id=" . $row1['shared_id'] ."' +shared_id, '_blank', 'toolbar=no,scrollbars=yes,resizable=yes,top=200,left=500,width=400,height=400');
}
</script>
";
}
如果您完全關心頁面優化,那將是明智得多的做法,而不是在while語句中循環腳本,而是在按鈕上設置數據變量和類,並使用onclick事件確定值,這樣您就不必頁面上同一腳本的20個實例具有不同的值。
例如:
在您的按鈕內:
class='clicked' data-id='".$row1['shared_id']."'
然后使用jquery作為腳本
<script>
$( ".clicked" ).click(function() {
var data = $(this).attr('data-id');
window.open('". $mywebsite . "vcontact_id='+data', '_blank', 'toolbar=no,scrollbars=yes,resizable=yes,top=200,left=500,width=400,height=400');
}
</script>
這將在分配給按鈕的類“ clicked”上查找click事件。 當單擊按鈕時,我們獲得“ data-id”的值並將其設置為變量“ data”。 然后,我們調用該變量,而不是回顯php變量。 這使我們可以使腳本脫離循環,而不必多次將其寫入頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.