我如何检测 DOM 已准备好并设置了所有属性
How can i detect DOM prepared and all attributes set
我有下一个html结构:
<div id="controls">
<div class="action" data-action="controller/action1" data-view="view1">...</div>
<div class="action" data-action="controller/action1" data-view="view2">...</div>
<div class="action" data-action="controller/action2" data-view="view1">...</div>
<div class="action" data-action="controller/action2" data-view="view2">...</div>
...e.t.c.
</div>
在 typeScript 中,我尝试获取数据属性并构建 ajax 查询:
$('#controls').off('click').on('click','.action',(e) => {
var $element = $(e.target),
action = $element.data('action'),
view = $element.data('view');
if(!action)
return this.sendNotification(false,'Setup action in config');
if(!view)
return this.sendNotification(false,'Setup view in config');
// Ajax request and other logic
});
我还有更新部分页面的功能(在主题开头包含 div 个块)
private updateActionsBlock() {
$.get(location.href, (html) => {
$('#controls').html($(html).find('#controls'));
this.init();
});
}
问题
如果用户遇到 Internet 连接问题或计算机速度慢(可能浏览器没有足够的 RAM)- 在使用 updateActionBlock()
几秒钟后无法从 $('.action')
获取数据属性。这些变得不确定。
问题
如何在 DOM 准备好之前禁止点击 $('.action');
?
我希望可以不用setTimeout
问题不在 DOM。
$('#controls').off('click').on('click','.action',(e) => {
var $element = $(e.target),
action = $element.data('action'),
view = $element.data('view');
if(!action)
return this.sendNotification(false,'Setup action in config');
if(!view)
return this.sendNotification(false,'Setup view in config');
// Ajax request and other logic
});
有时,当我点击 .action
时,我在 e.target
中输入了错误的元素。而不是 <div class='action'>...</div>
我获得了内部元素。
所以当我将 e.target
更改为 e.currentTarget
时,错误已修复。
我有下一个html结构:
<div id="controls">
<div class="action" data-action="controller/action1" data-view="view1">...</div>
<div class="action" data-action="controller/action1" data-view="view2">...</div>
<div class="action" data-action="controller/action2" data-view="view1">...</div>
<div class="action" data-action="controller/action2" data-view="view2">...</div>
...e.t.c.
</div>
在 typeScript 中,我尝试获取数据属性并构建 ajax 查询:
$('#controls').off('click').on('click','.action',(e) => {
var $element = $(e.target),
action = $element.data('action'),
view = $element.data('view');
if(!action)
return this.sendNotification(false,'Setup action in config');
if(!view)
return this.sendNotification(false,'Setup view in config');
// Ajax request and other logic
});
我还有更新部分页面的功能(在主题开头包含 div 个块)
private updateActionsBlock() {
$.get(location.href, (html) => {
$('#controls').html($(html).find('#controls'));
this.init();
});
}
问题
如果用户遇到 Internet 连接问题或计算机速度慢(可能浏览器没有足够的 RAM)- 在使用 updateActionBlock()
几秒钟后无法从 $('.action')
获取数据属性。这些变得不确定。
问题
如何在 DOM 准备好之前禁止点击 $('.action');
?
我希望可以不用setTimeout
问题不在 DOM。
$('#controls').off('click').on('click','.action',(e) => {
var $element = $(e.target),
action = $element.data('action'),
view = $element.data('view');
if(!action)
return this.sendNotification(false,'Setup action in config');
if(!view)
return this.sendNotification(false,'Setup view in config');
// Ajax request and other logic
});
有时,当我点击 .action
时,我在 e.target
中输入了错误的元素。而不是 <div class='action'>...</div>
我获得了内部元素。
所以当我将 e.target
更改为 e.currentTarget
时,错误已修复。