gpt4 book ai didi

javascript - 事件处理程序在外​​部 JS 文件中不起作用?

转载 作者:行者123 更新时间:2023-11-28 04:56:00 25 4
gpt4 key购买 nike

这有效:(将其全部保存在一个文件中)

<html><head></head>
<body>
//content-wrapper --> ajax loaded
<script type="text/javascript">
$(document).ajaxComplete(function(event, xhr, settings) {
var a_row_id = 0;
$('body').on('click', '.ready-create-rename-row', function() {
a_row_id = $(this).data('row-id');
console.log('Attempting to rename row ' + a_row_id);
});
});
</script>
</body>
</html>

这不是:我没有收到任何错误,但事件处理程序没有触发;控制台保持空白

<html><head></head>
<body>
<!-- content-wrapper -- ajax loaded -->
<script src="<?php echo base_url();?>assets/js/func_rows.js" type="text/javascript"></script>
<script type="text/javascript">
//Some code in document.ready
</script>
</body>
</html>

func_rows.js:

$(document).ajaxComplete(function(event, xhr, settings) {
var a_row_id = 0;
$('body').on('click', '.ready-create-rename-row', function() {
a_row_id = $(this).data('row-id');
console.log('Attempting to rename row ' + a_row_id);
});
//Other events here get fired however
});

Ajax加载的内容:

<div class="row-options">
<button type="button" class="flat circle ready-create-rename-row"
data-row-id=<?php echo $r->id; ?>
data-label-id='row_rename_<?php echo $r->id; ?>'
data-toggle="modal"
data-target="#rename-row-modal">
<i class="mdi mdi-pencil"></i>
</button>
</div>

<!-- Rename Row Confirmation Modal -->
<div id="rename-row-modal" class="modal fade" role="dialog">
<div class="modal-dialog plain-material-dialog confirmation">
<!-- Modal content-->
<div class="modal-content plain-material-content">
<div class="modal-body plain-material-body">
Rename Row
<div class="material-input-group stretched">
<label>Row name</label>
<input type="text" id="create-new-row-name" required>
</div>
</div>
<div class="modal-footer plain-material-footer">
<button type="button" class="btn btn-default flat" data-dismiss="modal">cancel</button>
<button type="button" class="btn btn-default flat" id="create-rename-row">rename</button>
</div>
</div>
</div>
</div>

令我困惑的是,func_rows.js 中的 ajaxComplete 中的其他事件处理程序即使绑定(bind)到 ajax 加载的元素也会被触发。我期望的是,当您单击 .ready-create-rename-row 按钮时,控制台中会弹出一条消息,但什么也没有发生。但是当我将事件处理程序放在同一个 html 文件中(作为模板)时,它就可以工作了。

最佳答案

事实证明,罪魁祸首是 ajaxComplete 处理程序中的另一个方法:

$('body').off().on('click', '.rename-row' function()
{
//stuff

$.ajax({
//Stuff
});
});

.off() 基本上禁用了之前发生的所有事件,因此我必须将其放在顶部,只需将 'body' 更改为类 .rename-row' 更安全。

关于javascript - 事件处理程序在外​​部 JS 文件中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42549972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com