我有一些JS代码,我在其中使用ajax加载项目列表。每个项目都有相应的"编辑"像这样的按钮:
<button class="btn btn-default open-EditProjectDialog" data-toggle="modal" data-id="someProjectName" data-target="#editProjectModal">Edit</button>
data-id用于区分此按钮对应的项目。我为这些按钮的模态创建了通用处理程序:
$(document).on(
"click",
".open-EditProjectDialog",
function() {
var projectName = $(this).data('id');
console.log("onclick open-EditProjectDialog " + projectName);
$(".modal-body #projectNameInput").val(projectName);
sessionStorage.setItem("currentlyConsideredProject", projectName);
});
此处理程序使用当前项目名称填充输入表单。当用户在输入中更改此名称并单击“保存”按钮时,我向服务器发送ajax调用并动态更新DOM中的值:
$("#saveEditProjectButton").click(
function() {
var newProjectName = $('#projectNameInput').val();
var projectName = sessionStorage.getItem("currentlyConsideredProject");
(...) //some checking
$.ajax({
url : '/services/projects/' + projectName,
type : 'PUT',
data : newProjectName,
success : function(result) {
$('#editProjectModal').modal('hide');
$.growl.notice({
message : "Changes saved"
});
updateProjectInDom(projectName, newProjectName);
},
error : function() {
$('#editProjectModal').modal('hide');
$.growl.error({
message : "Could not save the changes"
});
}
});
});
function updateProjectInDom(projectName, newProjectName) {
var projectDiv = $("div #" + projectName);
projectDiv.attr("id", newProjectName);
projectDiv.find("button").attr("data-id", newProjectName);
};
在chrome dev工具中,我可以看到在正确的ajax后,在DOM中更新了pUT data-id。但是,当我再次打开EditProjectDialog时,它会加载旧的projectName。任何建议我做错了什么以及为什么$(this).data(&#39; id&#39;)加载旧的data-id属性值?
答案 0 :(得分:0)
.click()被认为是jQuery中的直接绑定,它不适用于动态生成的内容。 on()被认为是一个适合您需要的委托绑定:
$('body').on('click', '#saveEditProjectButton', function() {
var newProjectName = $('#projectNameInput').val();
var projectName = sessionStorage.getItem("currentlyConsideredProject");
(...) //some checking
$.ajax({
url : '/services/projects/' + projectName,
type : 'PUT',
data : newProjectName,
success : function(result) {
$('#editProjectModal').modal('hide');
$.growl.notice({
message : "Changes saved"
});
updateProjectInDom(projectName, newProjectName);
},
error : function() {
$('#editProjectModal').modal('hide');
$.growl.error({
message : "Could not save the changes"
});
}
});
});
编辑:忘记#saveEditProjectButton周围的引号。
答案 1 :(得分:0)
我的问题是我jQuery确实缓存了数据值。所以我最终没有使用jQuery,只是使用普通的Javascript。
jQuery的:
$('#element').data('id');
使用Javascript:
document.getElementByID('element').dataset.id;
普通的Javascript不会缓存任何内容并加载更新的data-id值。