JavaScript: Как передать функцию со строковыми параметрами в качестве параметра к другой функции

PROJECT удаляет столбцы, а SELECT удаляет строки.

19
задан antonioh 26 May 2009 в 08:39
поделиться

3 ответа

One way would be to just escape the quotes properly:

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

In this case, though, I think a better way to handle this would be to wrap the two handlers in anonymous functions:

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

And then, you could call them from within myfunction like this:

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

    if (okClicked)
    {
        onOK();
    }

    if (cancelClicked)
    {
        onCancel();
    }
}

That's probably not what myfunction would actually look like, but you get the general idea. The point is, if you use anonymous functions, you have a lot more flexibility, and you keep your code a lot cleaner as well.

18
ответ дан 30 November 2019 в 04:12
поделиться

Я бы сделал это примерно так:

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);  
}

Но тогда я также, вероятно, привязал бы закрытие к настраиваемому подписанному событию. На самом деле вам нужно добавить некоторые детали к вопросу, но будучи первоклассными функциями, их легко пройти, и получить для них параметры можно любым количеством способов. Я бы не стал передавать их как строковые метки, поскольку косвенное обращение чревато ошибками.

4
ответ дан 30 November 2019 в 04:12
поделиться

Попробуйте следующее:

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

Затем вам просто нужно вызвать эти две функции, переданные в myfunction :

function myfunction(url, f1, f2) {
    // …
    f1();
    f2();
}
7
ответ дан 30 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: