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>";

但是,它只正确加载循环中的第一行。之后,它显示相同的$_GET地址,而不管它在while循环中的位置。如果我将行转换为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。任何帮助都将非常感激。

修改这部分:

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>";

myFunction在每次循环中都被重写。您总是可以使用增量计数器重写代码以更改函数名。在我看来,最好不要把javascript和php混在一起。你总是可以把这些作为附加参数传递到你输出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>

我相信你只需要把你的脚本移到if循环之外,但在while循环中维护它,你需要添加你的(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>";
    }
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变量。这允许我们将脚本从循环中取出,而不是将其多次写入页面。