我在外部脚本文件和文件内的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,其中涵盖了不同侦听器的事件优先级,但没有出现相同侦听器的事件。
答案 0 :(得分:1)
Javascript运行顺序实际上非常简单。除非您使用异步代码(例如,事件处理程序,AJAX请求或setTimeout),否则始终按顺序排序代码。换句话说,浏览器从页面顶部开始,运行它找到的第一个脚本标记中的所有内容,移动到下一个脚本标记等。
异步的东西混淆了一点,但一般规则(至少在大多数库中)是第一个连接起来的处理程序首先运行。因此,在这种情况下,您的外部document.ready处理程序将关闭,因为它在页面上的位置早于页内脚本标记。