Javascript:如何将带有字符串参数的函数作为参数传递给另一个函数

ant*_*ioh 19 javascript

我需要做这样的事情:

<input type="button" value="click" id="mybtn" 
onclick="myfunction('/myController/myAction', 
                   'myfuncionOnOK('/myController2/myAction2', 
                                  'myParameter2');',
                   'myfuncionOnCancel('/myController3/myAction3', 
                                  'myParameter3');');"  />
Run Code Online (Sandbox Code Playgroud)

这个问题的上下文是在onClick上我需要调用一个javascript函数,它将对我提供的url进行ajax调用.它将使用OK和Cancel按钮打开一个模态div.

到目前为止一切都很好.但是我还需要告诉javascript函数另一个函数与其他参数和在新div中单击OK按钮时要调用的url.另一个用于取消按钮.

问题是我无法正确传递第二个参数,因为它没有正确转义并给我javascript错误.

我已经在SO中搜索了其他类似的Javascript问题,但它们似乎没有涵盖我需要做的事情.

有人知道如何将这种字符串参数传递给javascript函数?或许还有另一个更好的解决方案,传递我没想到的东西.

提前致谢

hbw*_*hbw 18

一种方法是正确地逃避引号:

<input type="button" value="click" id="mybtn"
       onclick="myfunction('/myController/myAction', 
               'myfuncionOnOK(\'/myController2/myAction2\', 
                   \'myParameter2\');',
               'myfuncionOnCancel(\'/myController3/myAction3\', 
                   \'myParameter3\');');">
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,我认为更好的方法是将两个处理程序包装在匿名函数中:

<input type="button" value="click" id="mybtn"
       onclick="myfunction('/myController/myAction', 
                function() { myfuncionOnOK('/myController2/myAction2', 
                             'myParameter2'); },
                function() { myfuncionOnCancel('/myController3/myAction3', 
                             'myParameter3'); });">
Run Code Online (Sandbox Code Playgroud)

然后,你可以从内部调用它们myfunction:

function myfunction(url, onOK, onCancel)
{
    // Do whatever myfunction would normally do...

    if (okClicked)
    {
        onOK();
    }

    if (cancelClicked)
    {
        onCancel();
    }
}
Run Code Online (Sandbox Code Playgroud)

这可能不是myfunction实际的样子,但你得到了一般的想法.关键是,如果你使用匿名函数,你会有更多的灵活性,并且你的代码也更加清晰.


Gum*_*mbo 7

试试这个:

onclick="myfunction(
    '/myController/myAction',
    function(){myfuncionOnOK('/myController2/myAction2','myParameter2');},
    function(){myfuncionOnCancel('/myController3/myAction3','myParameter3');}
);"
Run Code Online (Sandbox Code Playgroud)

然后你只需要将这两个函数调用传递给myfunction:

function myfunction(url, f1, f2) {
    // …
    f1();
    f2();
}
Run Code Online (Sandbox Code Playgroud)