我正在尝试监视一个表单,以查看该表单何时变为“脏”(更改),以便随后启用“保存更改”按钮。这很简单。在$(document).ready()部分中,我在表单上启用dirtyForms。
$(".dirtyForm").dirtyForms();
然后,我从ajax调用中加载表单,并在同一函数内将其设置为clean,然后开始调用函数以检查其是否脏了。
$(".dirtyForm").dirtyForms("setClean");
constant = setInterval(function(){checkDirty()}, 500);
这是我的功能,以检查何时变脏。顺便说一句,如果有人知道做这部分的更好方法,请告诉我。
function checkDirty(){
if ($.DirtyForms.isDirty()){
$(".saveDirtyForm").removeAttr("disabled");
$(".resetDirtyForm").removeAttr("disabled");
console.log("Dirty...");
clearTimeout(constant);
}
}
您会注意到,在checkDirty函数中,它具有clearTimeout(constant)来阻止函数在表单变脏后继续重复。至此,一切工作正常。这些按钮将保持禁用状态,直到我进行更改,然后几乎立即变为启用状态。问题出在我想起ajax函数以向表单加载更多信息时。重置表单时,将其设置为clean时会出现错误。它说,
Uncaught TypeError: Object function ( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
} has no method 'facebox'
此错误在jquery.dirtyForms.js文件中。它不会将表单设置为清除并再次启动监视功能。有人知道我在做什么错吗?
这是zeroflagL在询问的功能。
function getOrderDets(id){
$.ajax({
url: DONEP+"blueBlob/donors/"+donorID+"/orders/"+id,
type: "GET",
dataType: "json",
success: function(data){
console.log(data);
dataSec = data.main.aResultData[0];
//Clear Fields
$("#orderIdTag").text('');
$("#orderNum").val('');
$("#doPlaced").val('');
$("#doShip").val('');
$("#dTrack").val('');
$("#doNote").val('');
//Set Main fields
$("#orderIdTag").text(dataSec.OrderID);
$("#orderNum").val(dataSec.OrderNumber);
$("#doPlaced").val(dataSec.OrderDate);
$("#doShip").val(dataSec.ShipDate);
$("#dTrack").val(dataSec.TrackingNumber);
$("#doNote").val(dataSec.OrderNote);
//Clean Dirty Form
$(".dirtyForm").dirtyForms("setClean");
constant = setInterval(function(){checkDirty()}, 500);
//Set Table
$(".orderDetTable").dataTable({
aaData: data.array,
"bAutoWidth": false,
"bDestroy": true,
"aoColumnDefs" : [
{"sWidth" : "13%", "sTitle" : "Quantity", "mData" : "Quantity", aTargets : [0]},
{"sTitle" : "Code", "mData" : "Code", aTargets : [1]},
{"sTitle" : "Amount", "mData" : "Amount", aTargets : [2]},
{"sWidth" : "6%", "sTitle" : "", "mData" : "OrderDetailsID", aTargets : [3], "mRender" : function(data, type, full){
return "<a href='#'><i class='glyphicon glyphicon-pencil orderDetEdit' id='"+data+"'></i></a>";
}}
]
});
}
});
}
这是facebox调用的堆栈跟踪。
$.facebox@http://dev.mysite.info/details.php?id=63#:540
.DirtyForms.dialog.fire@http://dev.mysite.info/assets/js/jquery.dirtyforms.js:25
bindFn@http://dev.mysite.info/assets/js/jquery.dirtyforms.js:421
aBindFn@http://dev.mysite.info/assets/js/jquery.dirtyforms.js:311
jQuery.event.dispatch@http://dev.mysite.info/assets/js/jquery.js:5095
jQuery.event.add/elemData.handle@http://dev.mysite.info/assets/js/jquery.js:4766
第一步是setClean
在更改包括数据表在内的表格中的任何内容后调用。
如果只是错误,那么这里有一个hack。如果您在最后期限之内,这将为您提供帮助,还可以帮助您调试:
if ( typeof $.facebox !== 'function' )
{
$.facebox = function(){
var console = window['console'];
if ( console && console.error ){
console.error( 'Warning: $.facebox() was called', arguments );
}
return $();
}
}
另一个提示:如果您多次包含同一个jQuery库,则您的插件可能无法正常工作。
为了解决这个问题,请使用以下魔术在代码库中搜索所有jquery实例:
grep -o 'jquery:[^"]*"1\....' -R *
这将搜索jQuery.fn.version字符串。
您还需要检查插件是否正常工作。尝试检查以下内容:
编辑:要获取堆栈跟踪以查看正在调用facebox函数:
$.facebox = function(){
alert( new Error().stack );
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句