我需要做这样的事情:
<input type="button" value="click" id="mybtn"
onclick="myfunction('/myController/myAction',
'myfuncionOnOK('/myController2/myAction2',
'myParameter2');',
'myfuncionOnCancel('/myController3/myAction3',
'myParameter3');');" />
这个问题的上下文是在onClick上我需要调用一个javascript函数,该函数将对我提供的url进行ajax调用。它将使用OK和Cancel按钮打开一个模态div。
到此为止,没关系。但是我还需要告诉javascript函数另一个函数与其他参数和在新div中单击OK按钮时要调用的url。另一个用于取消按钮。
问题是我无法正确传递第二个参数,因为它没有正确转义并给我javascript错误。
我已经在SO中搜索了其他类似的Javascript问题,但它们似乎没有涵盖我需要做的事情。
有人知道如何将这种字符串参数传递给javascript函数?或许还有另一个更好的解决办法,即传递我认为没有的东西。
提前致谢
答案 0 :(得分:18)
一种方法是正确地逃避引号:
<input type="button" value="click" id="mybtn"
onclick="myfunction('/myController/myAction',
'myfuncionOnOK(\'/myController2/myAction2\',
\'myParameter2\');',
'myfuncionOnCancel(\'/myController3/myAction3\',
\'myParameter3\');');">
在这种情况下,我认为更好的方法是将两个处理程序包装在匿名函数中:
<input type="button" value="click" id="mybtn"
onclick="myfunction('/myController/myAction',
function() { myfuncionOnOK('/myController2/myAction2',
'myParameter2'); },
function() { myfuncionOnCancel('/myController3/myAction3',
'myParameter3'); });">
然后,您可以在myfunction
内打电话给他们:
function myfunction(url, onOK, onCancel)
{
// Do whatever myfunction would normally do...
if (okClicked)
{
onOK();
}
if (cancelClicked)
{
onCancel();
}
}
这可能不是myfunction
实际上看起来的样子,但你得到了一般的想法。关键是,如果你使用匿名函数,你会有更多的灵活性,并且你的代码也更加清晰。
答案 1 :(得分:7)
试试这个:
onclick="myfunction(
'/myController/myAction',
function(){myfuncionOnOK('/myController2/myAction2','myParameter2');},
function(){myfuncionOnCancel('/myController3/myAction3','myParameter3');}
);"
然后你只需要调用传递给myfunction
的这两个函数:
function myfunction(url, f1, f2) {
// …
f1();
f2();
}
答案 2 :(得分:4)
我,我会这样做:
HTML:
onclick="myfunction({path:'/myController/myAction', ok:myfunctionOnOk, okArgs:['/myController2/myAction2','myParameter2'], cancel:myfunctionOnCancel, cancelArgs:['/myController3/myAction3','myParameter3']);"
JS:
function myfunction(params)
{
var path = params.path;
/* do stuff */
// on ok condition
params.ok(params.okArgs);
// on cancel condition
params.cancel(params.cancelArgs);
}
但是我也很可能将一个闭包绑定到一个自定义订阅的事件。你需要真正地为问题添加一些细节,但是first-class函数很容易通过,并且可以通过多种方式获取它们的参数。我会避免将它们作为字符串标签传递,但间接是容易出错的。