0

我想通过调用函数在此对话框中创建一个带有按钮功能的对话框。但它不起作用。
我下面的代码//函数初始对话框

function inti_dlg(selector, autoOpen, height, width, modal, num_button, fn_apply, fn_cancel, fn_close)
    {
        if (num_button>1)
        {
            selector.dialog({
                autoOpen: autoOpen,
                height:height,
                width:width,
                modal:modal,
                buttons:{
                    Apply:function(){fn_apply},
                    Cancel:function(){fn_cancel}
                },
                close:function(){fn_close}
            });
        }
        else{
            selector.dialog({
                autoOpen: autoOpen,
                height:height,
                width:width,
                modal:modal,
                buttons:{
                    Apply:function(){fn_apply}
                },
                close:function(){fn_close}
            });
        }
    }

//函数abc

function abc()
{
    alert("abc");
}

// 调用初始对话框函数

$(function (){
    inti_dlg($('#cde'), false, 440, 480, true, 1, abc(), '', abc());
    $('#clickhere').click(function(){$('#cde').dialog('open');});
});

网页:

<div id="clickhere">Click here</div>
<div id="cde">
     <div>Test : pass argument as a function</div>
</div>
4

2 回答 2

2

http://devlicio.us/blogs/sergio_pereira/archive/2009/02/09/javascript-5-ways-to-call-a-function.aspx

利用

Function.apply()

Function.call()

调用作为参数传递的函数。并且您不需要添加括号以及函数名称作为参数传递。只需传递函数名称。

function inti_dlg(selector, autoOpen, height, width, modal, num_button, fn_apply, fn_cancel, fn_close)
{
    if (num_button>1)
    {
        selector.dialog({
            autoOpen: autoOpen,
            height:height,
            width:width,
            modal:modal,
            buttons:{
                Apply:function(){fn_apply.apply()},
                Cancel:function(){fn_cancel.apply()}
            },
            close:function(){fn_close.apply()}
        });
    }
    else{
        selector.dialog({
            autoOpen: autoOpen,
            height:height,
            width:width,
            modal:modal,
            buttons:{
                Apply:function(){fn_apply.apply()}
            },
            close:function(){fn_close.apply()}
        });
    }
}

并调用这个

$(function (){
inti_dlg($('#cde'), false, 440, 480, true, 1, abc, '', abc);
$('#clickhere').click(function(){$('#cde').dialog('open');});
});
于 2012-06-05T12:01:13.407 回答
2

您实际上是在执行该函数,而不是错误地传递它。为了传递函数并清楚地表明发生了什么,我建议执行以下操作:

var abc = function ()
{
    alert("abc");
}


$(function (){
    inti_dlg($('#cde'), false, 440, 480, true, 1, abc, '', abc);
    $('#clickhere').click(function(){$('#cde').dialog('open');});
});

然后,当您在“inti_dlg”内时,不要对“fn_apply、fn_cancel 或 fn_close”做任何事情。您想将未触及的函数传递到 jQuery 对话框中以便在那里执行。

一开始可能很难掌握,但为了有效地使用 JavaScript,您可能需要根据您习惯的语言调整您对“函数”的理解。由于 JavaScript 是一种函数式语言(或多或少),因此函数是一等公民,可以像任何其他变量(如字符串或 int)一样传递,然后通过将 () 附加到函数变量名(并传入函数的任何参数)

于 2012-06-06T05:39:59.977 回答