我正在学习 javascript 揭示原型模式。我有两个脚本 1 定义一个对话框和另一个使用它。除了这个 javascript 抛出 $(dialogDiv) 没有在 Firefox 中定义之外,一切似乎都正常工作?但是,该脚本在 IE 和 Chrome 中运行良好。
揭示原型:
var Sandbox = Sandbox || { };
Sandbox.UI = Sandbox.UI || { };
Sandbox.UI.AjaxContentModalDialog = function(elementId, dialogOptions) {
this.dialogDiv = elementId;
this.options = dialogOptions;
};
Sandbox.UI.AjaxContentModalDialog.prototype = function () {
var open = function (methodName, url) {
$(dialogDiv).css("overflow", "hidden");
$(dialogDiv).dialog({
width: this.options.width,
height: this.options.height,
autoOpen: false,
resizable: false,
modal: true,
title: this.options.title,
buttons: {
Save: function () {
var form = $(options.formToPost);
$.ajax({
type: "POST",
url: form.attr('action'),
data: form.serialize(),
success: function (data, status, xhr) {
if (data.IsValid) {
$(dialogDiv).dialog('close');
$(dialogDiv).empty();
$(options.divToUpdate).empty();
$(options.divToUpdate).html(data.View);
} else {
$("#errorDiv").html(data.Message + "<br/>");
}
}
});
},
Cancel: function () {
$(dialogDiv).dialog('close');
$(dialogDiv).empty();
}
}
});
$.ajax(
{
Type: methodName,
url: url,
success: function (data, status, xhr) {
openDialog(data);
}
});
function openDialog(data) {
$(dialogDiv).html(data);
$(dialogDiv).dialog('open');
}
};
return {
open: open
};
} ();
消费者:
"use strict";
var options = { title: 'Edit User Profile Setting Value',
height: 180,
width: 375,
formToPost: '#userProfileSettingForm',
divToUpdate: '#userProfileDetail',
buttons: [{ text: "Ok" }, { text: "Cancel"}]
};
var dialog;
dialog = new Sandbox.UI.AjaxContentModalDialog('#dialogDiv', options);
$(document).ready(function () {
disableInheritLinks();
$('.Sandbox-udsActionLink').live("click", function (e) {
e.preventDefault();
dialog.open('get', this.href);
return false;
});
function disableInheritLinks() {
$('.Sandbox-disabled').each(function (item) {
this.href = '';
});
$('.Sandbox-disabled').live("click", function (e) {
e.preventDefault();
this.href = '';
console.log("disalbed: " + this.href);
return false;
});
}
});