javascript事件序列/层次结构包含文件与文件内

时间:2012-07-27 20:57:56

标签: javascript jquery html

我在外部脚本文件和文件内的document.ready上定义了相同的侦听器。我在一个中央外部文件中有一个,因为我总是希望在单击类.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文件中的侦听器在文件内脚本的侦听器之前触发,但我想要相反(我希望在confirm=false时从外部文件中取消第二个事件。)

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

编辑:我读过question 282245,其中涵盖了不同侦听器的事件优先级,但没有出现相同侦听器的事件。

1 个答案:

答案 0 :(得分:1)

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

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