0

我一直在研究 Web 应用程序的一部分。javascript 文件变得相当大,其中很大一部分负责初始化和处理 jQuery UI 元素和事件。为了使事情更具可读性和可维护性,我将 UI 初始化程序和事件处理程序拆分到一个单独的文件中。该文件在逻辑文件之前加载,由 firebug 的 net 选项卡确认。

由于我已经分离了 UI 元素,我注意到按钮和复选框在它们的事件第一次触发之前已经从单击触发器变为双击。之后,单击执行事件。为了仔细检查,我在事件处理程序中设置了一个日志语句,直到第二次单击它才会打印。

这是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>

onload在 setCoordinates 中定义,然后setupElements在 ui_initilization 中触发。

例如,我在 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();
});

第一次单击什么也不做,日志语句也不显示。第二次点击触发事件。

有没有办法来解决这个问题?

4

1 回答 1

1

如果没有现场示例,我真的很难解决这个问题。也许这是一些默认的浏览器行为......或者点击的触发器在第一次点击时不可用

尝试这个

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

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