簡體   English   中英

為什么在Firefox和Safari中無法觸發onclick事件?

[英]Why does onclick event not fire in Firefox and Safari?

我的div中有8層畫布。 有四組,每組兩個(屏幕外緩沖區和交換)。 一層用於背景圖像,一層用於基本靜態繪圖,一層用於動畫。 還有另一層用於淡入和淡出另一種動畫。

在我開發它時,onclick事件運行良好,但最近在某些時候已停止工作。 有時,我必須點擊兩次或三下才能觸發。

我測試過的唯一其他環境(除了Yosemite上的Firefox和Safari)是iOS(iPhone)上的Safari,奇怪的是,它在iPhone上運行良好。

我在下面有一個html示例和一些JS。 我知道人們想要一個能證明問題的標本。 不給我全部原始代碼,我就無法創建一個。

這行得通,我只想給你一個情況的想法:

<!DOCTYPE html>
<html>
    <head>
            <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1"/>
            <script language="javascript">
                    function onLoad()
                    {
                            console.log("Loaded.");
                            context = document.getElementById("animatedCanvas_2").getContext("2d");
                            context.fillStyle = "rgba(0, 0, 0, 1)";
                            context.fillRect(0,0,100,100);
                    }

                    function onTouch(e)
                    {
                            console.log("You touched me.");
                    }
            </script>
    </head>
    <body onload="onLoad();">
            <div id ="canvasDiv" ontouchstart="onTouch(event);" onclick="onTouch(event);">
                    <canvas id="backgroundCanvas_1" style="position:absolute;top:0px;left:0px;z-index:1;display:none;" width="100px" height="100px"></canvas>
                    <canvas id="backgroundCanvas_2" style="position:absolute;top:0px;left:0px;z-index:1" width="100px" height="100px"></canvas>
                    <canvas id="textCanvas_1" style="position:absolute;top:0px;left:0px;z-index:2;display:none;" width="100px" height="100px"></canvas>
                    <canvas id="textCanvas_2" style="position:absolute;top:0px;left:0px;z-index:2" width="100px" height="100px"></canvas>
                    <canvas id="animatedCanvas_1" style="position:absolute;top:0px;left:0px;z-index:3;display:none;" width="100px" height="100px"></canvas>
                    <canvas id="animatedCanvas_2" style="position:absolute;top:0px;left:0px;z-index:3" width="100px" height="100px"></canvas>
                    <canvas id="successCanvas_1" style="position:absolute;top:0px;left:0px;z-index:4;display:none;" width="100px" height="100px"></canvas>
                    <canvas id="successCanvas_2" style="position:absolute;top:0px;left:0px;z-index:4;display:none;" width="100px" height="100px"></canvas>
            </div>
    </body>
</html>

這個標本有效。 我想知道你們中是否有人能想到一個原因,就是在onTouch的console.log之后添加更多代碼后,onclick才會偶爾起作用。

注意:我沒有在JS的DOM元素上設置任何事件。

我唯一看到的可能問題是

<div id ="canvasDiv"

id=之間的空格。

除此之外,沒有什么看起來是錯誤的,但是如果不執行代碼就很難說。

我找不到功能或您對它們的調用有任何問題。 但是,對於我來說,停止混合Internet語言已經是一個艱巨的教訓。 這是腳本和HTML的重寫,以使JavaScript得以執行而不必在HTML中調用。 遵循當前趨勢,Internet編程似乎已經花費了近幾年的時間。

它可以在Firefox,Chrome,IE11和Safari(我下班的瀏覽器)中使用。 據我所知,您的代碼應該可以工作,並且對於所有這些相同的瀏覽器來說,它都是對我有用的。 我不知道你為什么遇到麻煩。 我能提供的最好的辦法就是嘗試這種變化,看看是否可行。

 function onLoad() { console.log("Loaded."); context = document.getElementById("animatedCanvas_2").getContext("2d"); context.fillStyle = "rgba(0, 0, 0, 1)"; context.fillRect(0, 0, 100, 100); } function onTouch() { console.log("You touched me."); } window.onload = function() { onLoad(); document.getElementById("canvasDiv").addEventListener("click", onTouch); document.getElementById("canvasDiv").addEventListener("touchstart", onTouch); }; 
 <body> <div id="canvasDiv"> <canvas id="backgroundCanvas_1" style="position:absolute;top:0px;left:0px;z-index:1;display:none;" width="100px" height="100px"></canvas> <canvas id="backgroundCanvas_2" style="position:absolute;top:0px;left:0px;z-index:1" width="100px" height="100px"></canvas> <canvas id="textCanvas_1" style="position:absolute;top:0px;left:0px;z-index:2;display:none;" width="100px" height="100px"></canvas> <canvas id="textCanvas_2" style="position:absolute;top:0px;left:0px;z-index:2" width="100px" height="100px"></canvas> <canvas id="animatedCanvas_1" style="position:absolute;top:0px;left:0px;z-index:3;display:none;" width="100px" height="100px"></canvas> <canvas id="animatedCanvas_2" style="position:absolute;top:0px;left:0px;z-index:3" width="100px" height="100px"></canvas> <canvas id="successCanvas_1" style="position:absolute;top:0px;left:0px;z-index:4;display:none;" width="100px" height="100px"></canvas> <canvas id="successCanvas_2" style="position:absolute;top:0px;left:0px;z-index:4;display:none;" width="100px" height="100px"></canvas> </div> </body> 

注意 :盡管id屬性與其值之間的空格不正確,但是大多數現代瀏覽器都可以對此進行補償。 話雖如此,它也應該是固定的(如我的示例所示)。

JavaScript使用駱駝外殼(或類似這種事情)嘗試更換onclick的onClickonload的onLoad。 這就是您腳本的全部需求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM