簡體   English   中英

JavaScript函數的URL中的PHP變量存在問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM