我有一个字段由jeditable更新。我想在提交更新之前输出警告消息,如果值正在减少(这会导致数据丢失),但是如果它被增加则不会。
这似乎是jeditable的onsubmit功能的一个很好的候选人,我可以愉快地触发。我可以从$('input',this).val()中获取新值,但是如何在此上下文中获取要与其进行比较的原始值?
...
自从发布上述解释/问题后,我想出了各种各样的解决方案。通过从
更改jquery.ready中的invokation$('#foo').editable(...);
到
$('#foo').hover(function(){
var old_value = $(this).text();
$(this).editable('ajax.php', {
submitdata {'old_value':old_value}
});
});
我可以在onsubmit方法中使用settings.submitdata.old_value。
但肯定有更好的方法吗?为了能够还原它,jeditable必须仍然将旧值隐藏在某个地方。那么问题就变成了如何从onsubmit函数中访问它?
非常感谢任何建议。
答案 0 :(得分:11)
更简单的解决方案是将此行添加到submitdata变量
"submitdata": function (value, settings) {
return {
"origValue": this.revert
};
}
答案 1 :(得分:8)
这是我的可编辑(使用submitEdit函数):
$(function () {
$('.editable').editable(submitEdit, {
indicator: '<img src="content/images/busy.gif">',
tooltip: '@Html.Resource("Strings,edit")',
cancel: '@Html.Resource("Strings,cancel")',
submit: '@Html.Resource("Strings,ok")',
event: 'edit'
});
/* Find and trigger "edit" event on correct Jeditable instance. */
$(".edit_trigger").bind("click", function () {
$(this).parent().prev().trigger("edit");
});
});
在submitEdit origvalue 是编辑前的原始值
function submitEdit(value, settings) {
var edits = new Object();
var origvalue = this.revert;
var textbox = this;
var result = value;
// sb experiment
var form = $(this).parents('form:first');
// end experiment
edits["field"] = form.find('input[name="field"]').val();
edits["value"] = value;
var returned = $.ajax({
url: '@Url.Action("AjaxUpdate")',
type: "POST",
data: edits,
dataType: "json",
complete: function (xhr, textStatus) {
// sever returned error?
// ajax failed?
if (textStatus != "success") {
$(textbox).html(origvalue);
alert('Request failed');
return;
}
var obj = jQuery.parseJSON(xhr.responseText);
if (obj != null && obj.responseText != null) {
alert(obj.responseText);
$(textbox).html(origvalue);
}
}
});
return (result);
}