0

私はしばらくの間、Webアプリのセクションに取り組んできました。javascriptファイルは非常に大きくなり、そのかなりの部分がjQueryUI要素とイベントの初期化と処理を担当しています。読みやすく保守しやすくするために、UI初期化子とイベントハンドラーを別のファイルに分割しました。このファイルは、firebugのnetタブで確認されているように、ロジックファイルの前にロードされます。

UI要素を分割したので、ボタンとチェックボックスが、イベントが初めて発生する前に、シングルクリックトリガーからダブルクリックに変更されていることに気付きました。その後、シングルクリックでイベントが実行されます。再確認するために、イベントハンドラー内にロギングステートメントを設定しましたが、2回目のクリックまで出力されません。

これは、htmlページのスクリプト宣言です。

<script type="text/javascript" src="../js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="../js/jquery-ui-1.8.21.custom.min.js"></script>
<script type="text/javascript" src="../js/ajaxupload.3.5.js"></script>

<script type="text/javascript" src="../js/modernizer.js"></script>
<script type="text/javascript" src="../js/ui_initialization.js"></script>
<script type="text/javascript" src="../js/setCoordinates.js"></script>
<script type='text/javascript> 
  $(document).ready(function(){
    onload();
  });
<script type="text/javascript" src="../js/nav.js"></script>

onloadsetCoordinatesで定義され、ui_initilizationでsetupElements起動します。

たとえば、htmlでチェックボックスを次のように定義します

<div id='checkboxes'>
  <input type="checkbox" id="panel" class="checkbox"/>
  <label for="panel" id='paneLabel' class="checkbox"></label>
</div>

クリックイベントを次のように処理しui_initilization.jsます

$("#checkboxes").buttonset();
$("#paneLabel").text("Hide Panels");

$("#panel").click(function(){
  console.log("pane click");
  handlePanelButtonClick();
});

最初のクリックは何もせず、loggingステートメントは表示されません。2回目のクリックで、イベントが発生します。

これを修正する方法はありますか?

4

1 に答える 1

1

実例がなければ、この問題を解決するのは本当に難しいです。おそらくそれはデフォルトのブラウザの動作です...またはクリックのトリガーは最初のクリックでは利用できません

これを試して

$("#panel").click(function(event){
    event.preventDefault();
    event.stopPropagation();

    //your code...
});
于 2012-08-15T22:45:24.093 に答える