jQuery通用代码
我在我的应用程序中使用jQuery模式对话框来处理正常的CRUD操作。 在某些情况下,我甚至打开了两个堆叠的modal dialog。
然后我在外部javascript文件中创建了两个generics函数来分别处理CRUD表单的显示和提交。
为了显示modal dialog,我调用以下函数
function _loadDialog(level, action, id, title, onCloseHandler) { var panel = panels[level]; $(panel).dialog("option", "title", title); var url = action; if (id != "") url = url + "/" + id; $.ajax({ type: "get", dataType: "html", url: url, data: {}, success: function(response) { $(panel).html('').html(response).dialog('open'); } }); $(panel).unbind("dialogclose").bind("dialogclose", function(event, ui) { if (onCloseHandler != null) { onCloseHandler(); } }); }
此函数接收一个level
参数,该参数指示函数如何堆叠对话框以及将呈现的部分标记从ajax调用返回的位置。 这个function很好。
在ajax调用返回的部分视图内部有输入,最后是以下代码
并且,对于jQuery部分,例如,
$("#contactForm").submit(function(event) { _submitForm(1, event, "#contactForm", "post", "html", ''); });
如您所见,提交函数具有以下签名
function _submitForm(level, event, formName, atype, adataType, aurl) { }
它处理
- 表单提交到正确的控制器操作
- 用户反馈(例如“行动成功执行”)
- 对话框关闭操作
需要level参数来解决所有function,包括关闭对话框,使用正确的DIV面板。
我希望能够像对话框一样显示相同的对话框,有时也可以显示为子对话框。
为了能够做到这一点,我的意思是“逻辑上说”,因为我对javascript和jQuery不是很强,我需要进行以下更改:
- 修改
_loadDialog
函数以将level
参数保存在对话框标记本身中 - 修改
_submitForm
函数并使用之前从_loadDialog
函数保存的正确level
参数进行_loadDialog
。
我怎样才能做到这一点?
我对什么是何时何地感到有点困惑,但似乎你想要将一些信息与特定元素联系起来。
为此,您可以使用jQuery的.data()
方法。 它会将您想要的任何数据与特定元素相关联。
不确定在你的情况下应该如何使用它,但这是一个通用的例子:
$('#someSelector').data('level', 3);
现在具有ID someSelector
的元素将在其关联数据中将数字3
映射到其'level'
属性。
所以要检索它,你会这样做:
$('#someSelector').data('level'); // returns 3
当销毁具有与之关联的数据的元素时(这只是此类数据的一个示例),您应该确保使用.remove()
或.empty()
或自动或手动删除数据的其他方法之一。
听起来你只需要在调用它时将你已经获得的level
参数传递给_submitForm
函数。
function _loadDialog(level, action, id, title, onCloseHandler) { var form = $(''); // ... Generates the form markup form.submit(function() { _submitForm(level, ...); }); }
虽然我显然已经跳过了我不知道你的实现的所有细节,但关键在于,无论传递到_loadDialog
任何level
以后都会在_submitForm
时传递给_submitForm
。
在JavaScript中,在调用_loadDialog
同时不调用_loadDialog
。 通过所谓的“闭包”(JavaScript程序员喜欢谈论的东西), level
变量可以安全地保存在form.submit()
匿名回调函数中,并且在最终调用该函数时仍然可以使用相同的值。