【发布时间】:2017-07-13 16:49:53
【问题描述】:
我正在尝试在通过 ajax 加载的元素上触发 click 事件。 但不知何故,我无法选择它来触发事件。
它基本上是一个带有左右箭头的图像。如果您单击其中一个箭头,则会加载一系列图像并像画廊一样替换图像。这已经可以了,我只需要触发第一张幻灯片,这样用户就不会知道画廊是通过 ajax 加载的,但一直都在那里。
替换工作正常,但我无法在 .slidenav-next 元素上触发事件。
.slidenav-next 后面有 JS 行为需要点击触发。
基本 HTML 结构
<div><div class="slidecont"><a href="#" class="slide"></a></div></div>
JS 用新的 HTML 结构填充它
$('body').on('click', '.slide', function(e) {
$.ajax({
context: this,
type: "POST",
url: 'index.php',
data: {'id':5}
}).done(function(data) {
$(this).closest('.slidecont').replaceWith(data);
console.log($(data).find('.slidenav-next'));
setTimeout(function () {
$(data).find('.slidenav-next').click();
}, 200);
});
});
通过 ajax 加载的 HTML 结构
<div><a href="#" class="slidenav-next"></a></div>
最后
<div><div><a href="#" class="slidenav-next"></a></div></div>
如果我加载这个结构:
<div id="xx"><a href="#" class="slidenav-next"></a></div>
我可以通过以下方式触发它:
$('#xx > .slidenav-next').click();
or via
$('body').find('.slidenav-next').click();
但这不是那么干净。我想从加载的数据中触发它。
【问题讨论】:
-
你有什么东西在听点击吗?作为点击的结果,您预计会发生什么
-
.slidenav-next 元素后面有行为。我只需要触发点击事件来启动它。我已经以不同的方式触发了它,但这并不那么干净。
-
如果你...
var $data = $(data); $(this).closest('.slidecont').replaceWith($data); $data.find('.slidenav-next').click(); -
成功了,谢谢!
$data = $(data); $data.find(...和$(data).find(...有什么区别? -
添加了我的想法作为答案
标签: javascript jquery ajax