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

HTML:

<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()

パラメータとして渡された関数を呼び出します。引数として渡すために関数名と一緒にparanthesisを追加する必要はありません。関数名を渡すだけです。

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 に答える