为什么我的Javascript函数在HTML中调用时不能运行/工作?

为什么我的Javascript函数在HTML中调用时不能运行/工作?,javascript,php,html,Javascript,Php,Html,所以我尝试了很多方法来调用函数本身。我对PHP/Javascript相当陌生,所以我正在努力边学边用 我做了一个函数来检查某个复选框是否被选中。我想让函数做的是,如果选中复选框,则将页面重定向到另一个页面,如果未选中,则显示一个警告框 我通过javascript函数传递的变量来自我的PHP代码,所以我想我的问题可能与这两种语言如何相互作用有关 这是我的密码。我从SQL数据库中获取各种变量,并将其存储在PHP变量中。我在PHP代码中的注释行之后调用该函数: 功能检查已接收(已接收,邮件){ 如果

所以我尝试了很多方法来调用函数本身。我对PHP/Javascript相当陌生,所以我正在努力边学边用

我做了一个函数来检查某个复选框是否被选中。我想让函数做的是,如果选中复选框,则将页面重定向到另一个页面,如果未选中,则显示一个警告框

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

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

功能检查已接收(已接收,邮件){
如果(已接收==已检查){
window.location.assign('https://someurl.php?email="邮件",;
}否则{
警惕(“LOL,不怎么样”);
}
}

在javascript中,不要编写

if (received == checked){
但是

您想将收到的变量
与字符串
“checked”
进行比较。 通过PHP,
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>";

问题是当从php连接html时。调用函数时应使用转义序列(例如,单击checkbox('Received',“$ticketNumber”)\“

$strHTML=“$dateSubmitted”;
$strHTML.=“$department”;
$strHTML.=“$courseNo”;
$strHTML.=“$instructorName”;
$strHTML.=”;
$strHTML.=”;
//$strHTML.=”;
$strHTML.=“.$email.”;
$strHTML.=“打印”;
$strHTML.=”;

在javascript函数中,如果(checked==“checked”)
加上引号,我将从注释中扩展我的答案,并给出更好的解释

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

因此,您的JS应该如下所示:

function checkReceived(received, profEmail){
    if (received == "checked"){
        window.location.assign('https://someurl.php?email=' + profEmail);
    } else{
        alert("LOL HOW ABOUT NO");
    }
}
现在,对于PHP,在
行中,$strHTML.=''.$email.''
您没有将
$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;
    }
?>

if(received==checked){
what's“checked”?它是一个字符串,我在这里发布时忘了做那个更改,但我已经将它更改为(received==checked).Hey,实际上我已经做了此更改,但不幸的是,它仍然不起作用。您是否查看了浏览器的调试器JavaScript控制台以查找错误?是的,我查看了,我在调用函数时不断收到一个“语法错误:无效或意外标记”。是否可能发生类型不匹配?我已在问题console.log()中添加了$strHTML当我执行该函数时,不会显示任何内容。它只是再次向我传递错误。您可能需要执行此操作
$strHTML.=''.$email.;
,以便您的HTML像
email@email.ca
checkReceived(received, profEmail){
    console.log(received, profEmail);
}
$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>";
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;
    }
?>