动态jQuery UI对话框回调函数问题

时间:2020-10-07 01:16:01

标签: javascript jquery jquery-ui dialog dynamic-function

我在使用jQuery UI对话框模式时遇到问题,并试图传递动态名称/值以用作要执行的回调函数(以及参数)

我有一个调用UI对话框的函数。因为它接受一个参数列表,其中一个是回调函数名称..以及与之相关的所有参数。

我无法让jQuery识别要被视为功能的动态名称/参数。

function ShowDialogBox(title, content, btn1text, btn2text, callbackFunction, argList){
var btn1css;
var btn2css;

//hide buttons if not in use
if(btn1text == ''){
    btn1css = "hidecss";
}else{
    btn1css = "showcss";
}

if(btn2text == ''){
    btn2css = "hidecss";
}else{
    btn2css = "showcss";
}

//main message/content
$("#lblMessage").html(content);


//params
$("#dialog").dialog({
    resizable: false,
    title: title,
    modal: true,
    width: '400px',
    height: 'auto',
    bgiframe: false,
    //hide: {effect: 'scale', duration: 100},
    
    buttons: [
        {
            text: btn1text,
            "class": btn1css,
            click: function () {
                //alert("button 1 pressed");
                
                //new dialog when cup is in position
                console.log('Call Back Check: ' + callbackFunction);
                console.log("Arg List: " + argList);
                eval(callbackFunction + '()'); // executes, but cant get any params?
                eval(callbackFunction + '(' +argList +')'); //doesnt work
                //callbackFunction(argList); // doesnt work


                //functionTest = window[callbackFunction];
                //functionTest(argList);
                
                //Goal: call new ShowDialogBox with different callback function name
                //ShowDialogBox('', 'Press start when the cup is in the holder.', 'Start', '', 'submitFunction',null);
                
                $("#dialog").dialog('close');
                
            }
        },
        {
            text: btn2text,
            "class": btn2css,
            click: function () {
                //alert("button 2 pressed");
                $("#dialog").dialog('close');
            }
        }
    ]
});

}

callbackFunction-要调用的回调函数的名称(ShowDialogBox) argList-表示所述回调函数的参数/参数列表

调用方法如下(再次使用回调函数名称:ShowDialogBox [但这次使用不同的回调函数])

ShowDialogBox('','Are you sure you want to order: <br>' + currentSelection, 'Continue','No', 'ShowDialogBox','mutiple ags go here, as commana string? array?');

我的问题:

1。)如何传递:ShowDialogBox作为callbackFunction参数/值,并将其视为单击按钮#1后执行的实际函数吗?

2。)如何将参数列表传递给这个“动态”命名的回调数组?

更新:所以我可以执行动态函数(可以这么说)..但是我似乎无法传递任何参数?

更新2:现在已经向我指出了扩展语法。.一切都可以满足我的需求..但是我想扩展它是否有疑问?

  • 为发布而修剪,没有参数,没有按钮动作。等

      function ShowDialogBox(title, content, btn1text, btn2text, callbackFunction, ...argList){
      //if not empty....execute it as a function! (nice)
      if(callbackFunction != ''){                         
          // Execute the callback (spread syntax)
          callbackFunction(...argList);
      }
     }
    

Works :(因为我上一个嵌套的callbackFunction没有传递任何参数)

//double verify (dialog prompts)
ShowDialogBox('','Are you sure you want to order: <br>' + currentSelection, 'Continue','No', ShowDialogBox, '', 'Please place drink in holder and press start when ready.', 'Start', '', submitForm, '');

但这不起作用..因为传递了附加的嵌套callBackFunction名称。AND参数? (但由于第一个callBackFunction参数之后的所有内容现在都是“ ... argList”。我不知道如何访问它((如果有可能)))

ShowDialogBox('','Are you sure you want to order: <br>' + currentSelection, 'Continue','No', callBackTest, 'Some Title', 'Some Message', 'Button 1 text', 'Button 2 text', someOtherCallBackFunction, 'no', 'args allowed', 'in nested callback function? how is it done (again?)');

1 个答案:

答案 0 :(得分:0)

对于第一个问题,只需不引用回调函数名称。

ShowDialogBox('', text , 'Continue','No', submitForm);

function submitForm() { /* ... */ }

要向其传递动态数量的参数,请使用spread syntax,它将创建一个数组,其中包含传递给函数并返回给各个参数的所有其余参数。

function ShowDialogBox(title, content, btn1text, btn2text, callbackFunction, ...argList) {
    // Execute the callback
    callbackFunction(...argList);
}