2

アプリケーションで問題が発生しました。ユーザーがイベントを発生させる必要がある をクリックすると、div(約 1/10 程度) 何も発生しonclickないことがあります。イベントが発生しない場合もあれば、すべてがうまくいく場合もあります。これは非常に奇妙です...

短いコードで、その問題を再現できます。

<html>

<head>
<style type="text/css">
  .links:hover{
    text-decoration: underline;
    cursor: pointer;
  }
</style>
</head>

<body>
  <span id="init_panel" style="visibility:visible; position:absolute; left:0px; top:0px;"></span>
  <script type="text/javascript">
  function init_match(){
    alert("in init_match()");
    //...
  }
  var flag=true;
  function loop(){
    if (flag){
        var div = document.getElementById("init_panel");
        var HTML = "<div class='links' onclick='init_match();'><font color='black'><b>new match!</b></font></div><br />";
        if (div.innerHTML!=HTML){
            div.innerHTML=HTML;
        }
        setTimeout(loop, 1000);
    }
    else{
        div.innerHTML="";
    }
  }
  loop();
  </script>
</body>

</html>

一連の div のコンテンツと対応するリンクを JavaScript で変更する必要があります。そのため、それに似たコードが必要です。イベントでその問題を回避する方法を誰かが明確にしてくれることを願っています。

編集して次の情報を追加します。

次の js コードを追加しました。

document.onclick = my_handler;
function my_handler() {
    alert("the document was clicked!");
}

その結果、他の onclick が失敗すると同時に、この document.onclick も失敗します。これは非常に奇妙です!onclick イベントで失敗することなく、div の内容を更新したいと思います...

このバグが見られる最新バージョンの jsfiddle は、http://jsfiddle.net/grSDs/3/ にあります

成功率と失敗率は、ブラウザごとに変化し、スクリプトが直接実行されているか、jsfiddle インターフェースを介して実行されているかによっても変化します (さまざまな状況で成功率が ~90% から ~0% になります)。

4

1 に答える 1

1

最後に、多くの試みの後、私は解決策を見つけました:

行を置き換える必要がありました:

var HTML = "<div class='links' onclick='init_match();'><font color='black'><b>new match!</b></font></div><br />";

に:

var HTML = "<div class=\"links\" onclick=\"init_match();\"><font color=\"black\"><b>new match!</b></font></div><br>";

1行目を挿入すると、そのdivのinnerHTMLが自動的に2行目に変更されるためです。そのため、コードが HTML (1 番目の文字列) を自動的に生成された div.innerHTML (2 番目の文字列) と比較しているときに、プログラムは div.innerHTML を更新していました。

コードのロジックは正しく、そのエラーには非常に奇妙な動作があり、ロジックのない解決策でした。

<br />javascript が (なぜ?) に変更され<br>、引用符も変更されるという事実は奇妙です。

于 2013-02-27T16:04:21.263 に答える