我正在尝试加载不同的视图,而无需使用JQUERY重新加载> AJAX。 它第一次正常工作,但第二次触发调用并加载页面。
这是我正在使用的按钮: 第一次:
<p><a href="{{ URL::route('onboarding-ajax', ['i' => '2']) }}" id="next-step" next-step-id="2">Start <i class="icon arrow-right"></i></a></p>
第二次:
<p><a href="{{ URL::route('onboarding-ajax', ['i' => '3']) }}" id="next-step" next-step-id="3" >Next</a></p>
这是脚本:
<script>
$('#next-step').on('click', function (e) {
e.preventDefault();
var that = $(this),
url = that.attr('href'),
type = 'GET',
step_id = that.attr('next-step-id'),
width = (step_id / 32)*100 + '%';
$.ajax({
url: url,
type: type,
success: function(response) {
$('#content-wrap').html(response.view);
window.history.pushState({path:url},'',url);
return false;
}
});
});
</script>
知道做错了什么?
答案 0 :(得分:4)
如果您的#next-step
元素位于#content-wrap
内,则在您替换#content-wrap
内容时它将消失。如果新内容中还包含#next-step
,则它是具有相同ID的不同的元素,并且不会像前一个那样附加click
处理程序那样。
挽救它的最简单方法是使用“实时”处理程序 - 不在#next-step
上,而是在父项上。试试这个:
$('#content-wrap').on('click', '#next-step', function (e) {
这会告诉#content-wrap
注意click
上的#next-step
事件。由于您不替换#content-wrap
本身,此处理程序将保持不变,即使替换#next-step
也会捕获事件。