0

document.ready我在外部脚本文件和文件中定义了相同的侦听器。我在中央外部文件中有一个,因为我总是希望在单击带有 class 的元素时执行删除.delete,但有时我也想做一些其他的事情。

//script.js
$(document).ready(function(){
    $('.delete').click(function(){
        //send AJAX delete
    });
});

//index.php
<script type="text/javascript">
    $(document).ready(function(){
        $('.delete').click(function(){
            var msg = "Are you sure you want to delete the <?=$item?>'"+$(this).attr("name")+"'?";
            if ( confirm(msg) ) {
                removeDataTableRow( $(this)... );
            }//fi
        });
    });
</script>

外部 js 文件中的侦听器在文件内脚本的侦听器之前触发,但我想要相反的情况(并且我想从外部文件中取消第二个事件 if confirm=false)。

我想在文件内脚本中设置一个变量并在外部设置该变量以了解确认的结果,但外部脚本中的脚本仍然首先触发,因此该变量尚未正确定义: /

编辑:我已经阅读了问题 282245,它涵盖了不同侦听器的事件优先级,但不适用于同一侦听器的出现。

4

1 回答 1

1

Javascript 运行顺序实际上非常简单。除非您使用异步代码(例如事件处理程序、AJAX 请求或 setTimeout),否则代码总是按顺序排列。换句话说,浏览器从页面顶部开始,运行它找到的第一个脚本标签中的所有内容,然后移动到下一个脚本标签,等等。

异步的东西有点混淆,但一般规则(至少在大多数库中)是第一个连接的处理程序首先运行。因此,在这种情况下,您的外部 document.ready 处理程序将关闭,因为它在页面上比您的页内脚本标记更早。

于 2012-07-27T21:19:26.433 回答