我想通过调用函数在该对话框中创建一个带按钮功能的对话框。但它不起作用。
我的代码如下
//函数初始对话框
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>
答案 0 :(得分: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');});
});
答案 1 :(得分: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 Dialog以便在那里执行。
起初可能很难掌握,但为了在JavaScript中有效,您可能需要根据您习惯的语言调整您对“功能”的理解。由于JavaScript是一种函数式语言(或多或少),函数是一等公民,可以像任何其他变量(如字符串或int)一样传递,稍后通过将appending()执行到函数变量名称(并传入)函数的任何参数)