2016-07-06 85 views
1

所以我尝试过调用函数本身的多种方法。我对PHP/Javascript比较陌生,因此我正在努力学习它。为什么我的Javascript函数在HTML中调用时不能运行/工作?

我做了一个函数,检查某个复选框是否被选中。我想要的功能是将页面重定向到另一个页面(如果复选框被选中),同时显示一个警告框(如果未选中)。

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

这是我的代码。我从SQL数据库获取各种变量并将其存储在PHP变量中。我所说的功能只是在PHP代码中的注释行之后:

function checkReceived(received, profEmail){ 
 
\t if (received == checked){ 
 
\t \t window.location.assign('https://someurl.php?email=' + profEmail'); 
 
\t } else{ 
 
\t \t alert("LOL HOW ABOUT NO"); 
 
\t } 
 
}
<?php 
 
\t //This loop populates the ticket display using the records in the database 
 
\t while($recordSet->EOF == false){ 
 
\t \t $ticketNumber = $recordSet->Fields['TicketNumber']; 
 
\t \t $dateSubmitted = $recordSet->Fields['DateSubmitted']; 
 
\t \t $department = $recordSet->Fields['Department']; 
 
\t \t $courseNo = $recordSet->Fields['CourseNumber']; 
 
\t \t $instructorName = $recordSet->Fields['InstructorName']; 
 
\t \t $received = ($recordSet->Fields['Received']) ? "checked" : "unchecked"; 
 
\t \t $sendReminder = ($recordSet->Fields['SendReminder']) ? "checked" : "unchecked"; 
 
\t \t $email = $recordSet->Fields['Email']; 
 
\t \t $CC = $recordSet->Fields['CC']; 
 

 

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

 
\t \t echo $strHTML; 
 

 
\t \t $recordSet->MoveNext; 
 
\t } 
 
?>

根据要求,这里是我的$ 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 protected]'/></td> 
 
<td><button id='emailButton' onclick='checkReceived(checked, [email protected])'>[email protected]</button></td> 
 
<td align='center'> <button onclick="window.open('https://someurl.php?ticketNumber=31')">Print</button> </td> 
 
</tr>

+0

'if(received == checked){'什么是“检查”? – gcampbell

+0

这是一个字符串,当我在这里发布时,我忘了进行更改,但是我已经将其更改为(received ==“checked”)。 –

回答

1

在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); 
} 
+0

嘿,我其实已经做了这个改变,但它仍然无法工作。 –

+0

你看过浏览器的Debugger JavaScript控制台是否有错误? – PaulH

+0

是的,我做了,当我调用函数时,我总是收到“语法错误:无效或意外的令牌”。它可能会发生类型不匹配吗? –

1

问题是,当连接从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")用引号

1

我扩大我的回答从注释有更好的解释时,应使用转义序列。

首先,在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; 
    } 
?> 

让我知道如何结果。

相关问题