繁体   English   中英

当我在HTML中调用它时,为什么我的Javascript函数无法运行/工作?

[英]Why does my Javascript function not run/work when I call it in HTML?

所以我尝试了很多方法来调用函数本身。 我是PHP / Javascript的新手,所以我正在努力学习它。

我已经创建了一个函数来检查是否选中了某个复选框。 我想要的功能是,如果选中复选框,则将页面重定向到另一页面,如果未选中则显示警告框。

我通过javascript函数传递的变量来自我的PHP代码,所以我认为我的问题可能与两种语言如何相互作用有关。

这是我的代码。 我从SQL数据库中获取各种变量并将其存储在PHP变量中。 我在PHP代码中的注释行之后调用该函数:

 function checkReceived(received, profEmail){ if (received == checked){ window.location.assign('https://someurl.php?email=' + profEmail'); } else{ alert("LOL HOW ABOUT NO"); } } 
 <?php //This loop populates the ticket display using the records in the database while($recordSet->EOF == false){ $ticketNumber = $recordSet->Fields['TicketNumber']; $dateSubmitted = $recordSet->Fields['DateSubmitted']; $department = $recordSet->Fields['Department']; $courseNo = $recordSet->Fields['CourseNumber']; $instructorName = $recordSet->Fields['InstructorName']; $received = ($recordSet->Fields['Received']) ? "checked" : "unchecked"; $sendReminder = ($recordSet->Fields['SendReminder']) ? "checked" : "unchecked"; $email = $recordSet->Fields['Email']; $CC = $recordSet->Fields['CC']; $strHTML = "<tr><td>$dateSubmitted</td>"; $strHTML .= "<td>$department</td>"; $strHTML .= "<td>$courseNo</td>"; $strHTML .= "<td style='word-break: break-all'>$instructorName</td>"; $strHTML .= "<td align='center'> <input type='checkbox' ".$received." class='receivedCheckbox' onchange='checkboxClicked(\\"Received\\", ".$ticketNumber.")'/> </td>"; $strHTML .= "<td align='center'> <input type='checkbox' ".$sendReminder." class='sendReminderCheckbox' onchange='checkboxClicked(\\"SendReminder\\", ".$ticketNumber.")' data-email='".$email."'/> </td>"; //$strHTML .= "<td style='word-break: break-all;' align='center'> <a href='javascript:checkReceived($received, $email)'>".$email."</a></td>"; $strHTML .= "<td><button id='emailButton' onclick='checkReceived($received, $email)'>".$email."</button></td>"; $strHTML .= "<td align='center'> <button onclick=\\"window.open('https://someurl.php?ticketNumber=".$ticketNumber."')\\">Print</button> </td>"; $strHTML .= "</tr>"; echo $strHTML; $recordSet->MoveNext; } ?> 

根据要求,这是我的$ strHTML:

 <td>Psychology</td> <td>1000</td> <td style='word-break: break-all'>Some Name</td> <td align='center'> <input type='checkbox' checked class='receivedCheckbox' onchange='checkboxClicked("Received", 31)'/> </td> <td align='center'> <input type='checkbox' unchecked class='sendReminderCheckbox' onchange='checkboxClicked("SendReminder", 31)' data-email='email@email.ca'/></td> <td><button id='emailButton' onclick='checkReceived(checked, email@email.ca)'>email@email.ca</button></td> <td align='center'> <button onclick="window.open('https://someurl.php?ticketNumber=31')">Print</button> </td> </tr> 

在javascript中,不要写

if (received == checked){

if (received == "checked"){

您想要将received的变量与字符串"checked" 通过PHP, received变量收到 "checked""unchecked"

$received = ($recordSet->Fields['Received']) ? "checked" : "unchecked";

然后通过javascript函数调用将其转换为HTML。 必须使用类似字符串调用javascript函数

checkReceived("string", "string")

所以在PHP中它变成了

echo "checkReceived(\\"string\\", \\"string\\")";

和PHP变量

echo "checkReceived(\\"$var1\\", \\"$var2\\")";

在你的代码中,它变成:

$strHTML .= "<td><button id='emailButton' onclick='checkReceived(\"$received\", \"$email\")'>$email</button></td>";

要查看函数checkReceived()是否被调用,请插入console.log()语句并查看浏览器的调试器JavaScript控制台。

checkReceived(received, profEmail){
    console.log(received, profEmail);
}

问题是从php连接html时。 你应该在callin函数时使用转义序列(ex onchange=\\"checkboxClicked('Received', ".$ticketNumber.")\\"

$strHTML  = "<tr><td>$dateSubmitted</td>";
    $strHTML .= "<td>$department</td>";
    $strHTML .= "<td>$courseNo</td>";
    $strHTML .= "<td style='word-break: break-all'>$instructorName</td>";
    $strHTML .= "<td align='center'> <input type='checkbox' ".$received." class='receivedCheckbox' onchange=\"checkboxClicked('Received', ".$ticketNumber.")\"/> </td>";
    $strHTML .= "<td align='center'> <input type='checkbox' ".$sendReminder." class='sendReminderCheckbox' onchange=\"checkboxClicked('SendReminder', ".$ticketNumber.")\" data-email='".$email."'/> </td>";
    //$strHTML .= "<td style='word-break: break-all;' align='center'> <a href='javascript:checkReceived($received, $email)'>".$email."</a></td>";
    $strHTML .= "<td><button id='emailButton' onclick=\"checkReceived('$received', '$email')\">".$email."</button></td>";
    $strHTML .= "<td align='center'> <button onclick=\"window.open('https://someurl.php?ticketNumber=".$ticketNumber."')\">Print</button> </td>";
    $strHTML .= "</tr>";

并在javascript函数中if(checked == "checked")带引号

我正在通过更好的解释扩大我对评论的回答。

首先在JS中,不要将变量与checked进行比较,而是与@PaulH提到的"checked" (即字符串)进行比较。

所以你的JS应该是这样的:

function checkReceived(received, profEmail){
    if (received == "checked"){
        window.location.assign('https://someurl.php?email=' + profEmail);
    } else{
        alert("LOL HOW ABOUT NO");
    }
}

现在为PHP,在行$strHTML .= "<td><button id='emailButton' onclick='checkReceived($received, $email)'>".$email."</button></td>"; 你没有将$received$email变量的输出包装在一个引号( " )中。这是必要的,因为它会打印HTML,它会将字符串传递给JS函数。所以你的PHP代码需要如下所示:

<?php
    //This loop populates the ticket display using the records in the database
    while($recordSet->EOF == false){
        $ticketNumber = $recordSet->Fields['TicketNumber'];
        $dateSubmitted = $recordSet->Fields['DateSubmitted'];
        $department = $recordSet->Fields['Department'];
        $courseNo = $recordSet->Fields['CourseNumber'];
        $instructorName = $recordSet->Fields['InstructorName'];
        $received = ($recordSet->Fields['Received']) ? "checked" : "unchecked";
        $sendReminder = ($recordSet->Fields['SendReminder']) ? "checked" : "unchecked";
        $email = $recordSet->Fields['Email'];
        $CC = $recordSet->Fields['CC'];


        $strHTML  = "<tr><td>$dateSubmitted</td>";
        $strHTML .= "<td>$department</td>";
        $strHTML .= "<td>$courseNo</td>";
        $strHTML .= "<td style='word-break: break-all'>$instructorName</td>";
        $strHTML .= "<td align='center'> <input type='checkbox' ".$received." class='receivedCheckbox' onchange='checkboxClicked(\"Received\", ".$ticketNumber.")'/> </td>";
        $strHTML .= "<td align='center'> <input type='checkbox' ".$sendReminder." class='sendReminderCheckbox' onchange='checkboxClicked(\"SendReminder\", ".$ticketNumber.")' data-email='".$email."'/> </td>";
        //$strHTML .= "<td style='word-break: break-all;' align='center'> <a href='javascript:checkReceived($received, $email)'>".$email."</a></td>";
        $strHTML .= "<td><button id='emailButton' onclick='checkReceived(\"$received\", \"$email\")'>".$email."</button></td>";
        $strHTML .= "<td align='center'> <button onclick=\"window.open('https://someurl.php?ticketNumber=".$ticketNumber."')\">Print</button> </td>";
        $strHTML .= "</tr>";

        echo $strHTML;

        $recordSet->MoveNext;
    }
?>

让我知道结果如何。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM