标题可能有点误导,但我不确定如何更好地表达它,所以我为此道歉。
我正在创建自定义处理程序,以便在按下新内容时网站不会刷新(例如,类似于youtube的工作方式)。
为此,我使用这个脚本:
$('.sidebar2 li a').click(function (e) {
test = true;
var button = $(this);
var noteId = button.data("noteid");
$(".sidebar2 li.active").removeClass("active");
var postData = { id: noteId };
$.ajax({
url: '/API/Note',
type: 'get',
data: postData,
success: function (resp) {
if (resp.success == true) {
$('#app-bar-left').html(resp.note.navBarHTML);
$('#cell-content').html(resp.note.noteContentHTML);
window.history.pushState({ path: window.location.href }, resp.note.title, '/MyNotes/Note/' + resp.note.noteId);
document.title = resp.note.title;
$('*[data-noteId="'+resp.note.noteId+'"]').parent().addClass("active")
e.preventDefault();
test = false;
return false;
}
}
});
});
即使我已声明e.preventDefault()
触发,javascript也会将新内容加载到当前帧中而不进行刷新,但浏览器无论如何都会再次刷新。
我尝试使用href="#"
但是在这种情况下,当我回去处理它时,我总是最后得到两个相同的页面,一个没有,一个带#最后,另外为此,拥有所有链接href="#"
我做错了什么使浏览器重定向"通常"即使我告诉他不,不,不是吗?
我还尝试在onclick="javascript:void(0)"
元素上添加a
并且没有帮助
答案 0 :(得分:2)
ajax
是异步的。当成功回调被调用时,事件将被冒泡到DOM树并进行处理。您需要在发送请求之前致电preventDefault
。
$('.sidebar2 li a').click(function (e) {
e.preventDefault(); // here for example
test = true;
var button = $(this);
var noteId = button.data("noteid");
$(".sidebar2 li.active").removeClass("active");
var postData = { id: noteId };
$.ajax({
url: '/API/Note',
type: 'get',
data: postData,
success: function (resp) {
if (resp.success == true) {
$('#app-bar-left').html(resp.note.navBarHTML);
$('#cell-content').html(resp.note.noteContentHTML);
window.history.pushState({ path: window.location.href }, resp.note.title, '/MyNotes/Note/' + resp.note.noteId);
document.title = resp.note.title;
$('*[data-noteId="'+resp.note.noteId+'"]').parent().addClass("active")
test = false;
// returning here makes no sense also
// return false;
}
}
});
});