为什么当我在 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 时。调用函数时应使用转义序列(例如 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;
}
?>
让我知道结果如何。
- jQuery函数不能只在一个页面上工作
- jQuery dosn'内联函数不能按预期工作
- 反向名称的JavaScript函数不能正确工作(例如学习JavaScript-O'Reilly)
- jQuery函数不能从父级继承
- delay()函数不能与jquery中的addClass()函数一起使用
- 日期函数不能正常工作
- JavaScript:递归函数不能正常工作
- 为什么这个简单的函数不能在这个javascript状态机中的这个对象上运行
- 为什么这个函数不能无限循环
- 打字脚本:参数类型函数不能分配给参数类型函数
- 猫鼬,函数不能在未定义的、来自查询函数上执行
- 为什么这个 javascript 函数不能访问同一类中的变量
- 函数不能实现到 while 循环中
- 为什么我的 JavaScript toHexString 函数不能在 Uint8Array 中正常工作
- Jquery Mobile on() 函数不能替代我的实时函数
- 为什么这个动画marginTop函数不能像我预期的那样工作
- 为什么不'这个Javascript函数不能工作
- 为什么IIFE/函数不能在外部函数中访问“这个”
- 函数不能用作另一个函数参数
- 为什么我的Javascript函数不能按预期工作