我有一个案例,我以前没有,真的无法弄明白,问题是什么。 :( 我试图为我的旧的,未解决的js代码创建一个控制器类,试图让它更加面向对象(是的,对我而言失败,但是练习也是知识的母亲)。 所以,这是我的代码:
一个函数调用Main函数,它处理变量并弹出一个表单,如:
function Main(com, multiple, grid) {
if (CheckTableFunctions(arguments) == true)
{
var partner = Partner.Factory(com);
switch(com)
{
case "CreatePartners":
...
break;
case "GetPartners":
$e = ShowModal(); // <- this makes a form visible
Communicate(com, partner, function(data) <- ajax req. with callback
{
... // <- manipulate data, fill form, etc.
});
Main("EditPartners", multiple, grid); // <- calling Main Editpartners case
break;
实际上,GetPartners案例在EditPartners之前,但它只是用于填写表单。编辑和事件绑定转到editpartners,如下所示:
case "EditPartners":
$e = GetModal(); // <- THE ERROR
$e.find("a.submit").click(function(e){
partner.fx_data.partner.data = getFormData($e)
Communicate(com, partner, function(data) // <- return the modified values by ajax
{
CloseModal();
});
});
break;
因此,当我运行fn GetModal时,它返回一个空对象,但在GetModal = fn(){$e=$(".poppedModal");return $e;}
运行后该函数正常Main(EditP)
。我认为这比其他任何事情更合乎逻辑或更有条理。说实话,我用回调来调用它,这意味着我使用了ShowModal(callback)
,当它准备就绪时,我调用了Main(EditP)
,但也没有用。{/ p>
修改
抱歉,我忘记了主要问题(我认为是主要问题)。所以我没有完全形式我只有一个html原型。原型,因为我总是在需要的时候克隆它。
所以这是showmodal fn,我认为这使得模态无法访问: <击> 撞击>
<击>function ShowModal()
{
$container = $('#myModal');
$clone = $container.clone();
$clone.removeAttr("id").addClass("clonedModal");
$clone.modal('show');
return $clone;
}
击> <击> 撞击>
function ShowModal()
{
$container = $('#partnerModal');
document.getElementById('partnerForm').reset();
$container.modal('show');
return $container;
}
感谢您的帮助。
REPAS
答案 0 :(得分:1)
有几点:
var
声明时才会进行本地化。否则,它们是“外部”成员,包括全局名称空间。你的几个变量需要本地化。未申报的变量可能会导致令人讨厌的错误。.clone()
确实会创建一个DOM片段的克隆,但不会自动将其惰性化回DOM。您需要使用jQuery指令执行此操作,例如.append()
,.prepend()
,.before()
,.after()
。我强烈怀疑你的问题的很大一部分是试图在未插入的克隆上进行.modal()
。编辑:
ShowModal具有正确的本地化变量:
function ShowModal() {
var $container = $('#partnerModal');
document.getElementById('partnerForm').reset();
$container.modal('show');
return $container;
}
事实上,如果.modal()
被编写为可链接的,那么ShowModal()
可以简化,以避免创建任何命名成员,本地或其他:
function ShowModal() {
$('#partnerForm').get(0).reset();
return $('#partnerModal').modal('show');
}
另外,请注意,按照惯例,在javascript编程中,只应使用初始Capital命名构造函数。构造函数是那些旨在使用new Fn()
调用的函数。 (这里并不重要,但是对构造函数的主题进行了大量讨论,有些人选择编写代码以避免使用new
)。