【发布时间】:2014-07-07 19:04:37
【问题描述】:
我有一些 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 开发工具中,我可以看到在 DOM 中更新了正确的 ajax PUT data-id 之后。但是,当我再次打开 EditProjectDialog 时,它会加载旧的 projectName。任何建议我做错了什么以及为什么 $(this).data('id') 加载 data-id 属性的旧值?
【问题讨论】:
标签: javascript jquery html twitter-bootstrap modal-dialog