【问题标题】:Javascript onclick not working in FirefoxJavascript onclick 在 Firefox 中不起作用
【发布时间】:2016-08-23 05:55:53
【问题描述】:

我不明白为什么下面的代码可以在不同的计算机上的 IE 和 Firefox 中运行,但在我的笔记本电脑上运行。

我已经卸载并重新安装了 Firefox 和 java。
每个部分都有一个确认和删除按钮,单击时可以设置确认或删除警报。
在 IE 中运行良好,在另一台计算机上运行 Firefox。

在问题计算机上,单击按钮时屏幕会闪烁,但警报既不清除也不确认。
apache2 日志中不会引发任何错误。

它基本上将三个变量传递给另一个更新 sql 表的 php 页面。
sql 中也不会抛出任何错误。

只是屏幕一闪,问题计算机上没有任何变化。
在同一台计算机上的 IE 中运行良好。

if ($_SESSION['pH1_Low_Alarm'] > 0) {
    echo "<tr>";
    echo "<td>";
    echo $_SESSION['pH1_Low_Time'];
    echo "</td>";
    echo "<td>pH1 Low</td>";
    if ($_SESSION['pH1_Low_Alarm'] == 1) {
        echo "<td>Unacknowledged</td>";
        echo "<td></td>";
        echo "<td><input type=\"submit\" name=\"alarmname_ack_id\" id=\"alarmname_ack_id\" value=\"Acknowledge\" onclick=\"alarm_sql('pH1','Low_Alarm',3)\" /></td>";
    }
    if ($_SESSION['pH1_Low_Alarm'] == 2) {
        echo "<td>Unacknowledged</td>";
        echo "<td align=\"center\"><img src=\"img/email.png\" /></td>";
        echo "<td><input type=\"submit\" name=\"alarmname_ack_id\" id=\"alarmname_ack_id\" value=\"Acknowledge\" onclick=\"alarm_sql('pH1','Low_Alarm',4)\" /></td>";
    }
    if ($_SESSION['pH1_Low_Alarm'] == 3) {
        echo "<td>Acknowledged</td>";
        echo "<td></td>";
        echo "<td></td>";
    }
    if ($_SESSION['pH1_Low_Alarm'] == 4) {
        echo "<td>Acknowledged</td>";
        echo "<td align=\"center\"><img src=\"img/email.png\" /></td>";
        echo "<td></td>";
    }
    echo "<td><input type=\"submit\" name=\"alarmname_ack_id\" id=\"alarmname_ack_id\" value=\"Delete\" onclick=\"alarm_sql('pH1','Low_Alarm',0)\" /></td>";
    echo "</tr>";
}

onclick事件调用的函数

function alarm_sql(sensorname, alarmname, alarmvalue) {
    var xmlhttp;
    if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else{   // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    }
    alarm_php_string = new String;
    alarm_php_string = "sql/sql_alarm_set.php?sensorname=" + sensorname + "&alarmname=" + alarmname + "&alarmvalue=" + alarmvalue;
    xmlhttp.open("GET",alarm_php_string,true);
    xmlhttp.send();
    sleep(500);
    document.location.reload(true);
}

更新

如果我右键单击确认或删除按钮并选择检查元素:

然后在调试器下的结果窗口中,我在 var 声明之后的函数开头放置一个断点。
然后,我可以在单击按钮后单步执行实际以这种方式工作的代码。
不确定当单个步骤有效但没有断点代码失败时这意味着什么。

这是当它不起作用时单击确认按钮后在控制台中显示的内容。

GET 
http://192.168.1.200/yieldbuddy/www/alarms.php [HTTP/1.1 200 OK 16ms]
GET 
http://192.168.1.200/yieldbuddy/www/img/background.png [HTTP/1.1 200 OK 11ms]
GET 
http://192.168.1.200/yieldbuddy/www/img/banner.png [HTTP/1.1 200 OK 16ms]
GET 
http://192.168.1.200/yieldbuddy/www/img/email.png

这似乎是我在笔记本电脑上安装 Window7 的问题。我可以在家里的所有其他计算机上运行此代码而不会出现问题,除了这台计算机。升级到 Firefox 48 后的所有其他计算机仍然可以毫无问题地运行代码。无论是什么原因,即使在删除并重新安装了 firefox 和 java 之后也会发生这种情况。看起来我要在问题计算机上重新安装完整的操作系统。

【问题讨论】:

  • 如果没有断点,你会在 Firefox 的控制台中得到任何错误吗?另外,为什么在收到 Ajax 响应之前运行的代码中调用.reload()?这可能就是为什么添加断点可以解决问题。 (顺便说一句,无论sleep(500); 做什么,都不是如何在JS 中实现延迟。使用setTimeout()。)
  • 您多次使用alarmname_ack_id(您的“确认按钮”)作为id==> 第一次:失败。您应该考虑将单引号集作为始终转义" 的替代方案。 ==> 第二...建议。问题:您的$("#alarmname_ack_id").click() 处理程序在哪里?

标签: javascript jquery html firefox onclick


【解决方案1】:

已通过 Firefox 48 中的以下操作纠正了此问题。

菜单/选项/高级/网络/连接 - 设置

更改代理设置

使用系统代理

没有代理

不确定原因,但这解决了问题计算机上的问题,网页在更改后按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多