将javascript传递给javascript函数
我想在用户按下其中一个按钮时传递一些javascript要执行的函数,但当前当我按下对话框上的“否”或“是”按钮时,什么都没有发生,它就在那里……firebug中没有显示错误。如果我将“alert('hi')”硬编码到对话框按钮中,它就可以正常工作,因此在传递javascript作为函数参数的一部分时一定有一些东西 我怎样才能让它工作?提前谢谢 下面是我的javascript函数:将javascript传递给javascript函数,javascript,jquery,Javascript,Jquery,我想在用户按下其中一个按钮时传递一些javascript要执行的函数,但当前当我按下对话框上的“否”或“是”按钮时,什么都没有发生,它就在那里……firebug中没有显示错误。如果我将“alert('hi')”硬编码到对话框按钮中,它就可以正常工作,因此在传递javascript作为函数参数的一部分时一定有一些东西 我怎样才能让它工作?提前谢谢 下面是我的javascript函数: function confirm_yes_no(xtitle,msg, btn_yes_txt, btn_no_t
function confirm_yes_no(xtitle,msg, btn_yes_txt, btn_no_txt, btn_yes_js, btn_no_js)
{
var button_yes = btn_yes_txt;
var button_no = btn_no_txt;
var dialog_buttons = {};
dialog_buttons[button_yes] = function(){ btn_yes_js }
dialog_buttons[button_no] = function(){ btn_no_js }
$("#modal_confirm_yes_no").html(msg);
$("#modal_confirm_yes_no").dialog({
title: xtitle,
bgiframe: true,
autoOpen: false,
height: 150,
width: 300,
modal: true,
buttons: dialog_buttons
});
$("#modal_confirm_yes_no").dialog("open");
}
confirm_yes_no("Print Checks", "Would you like to print checks now?", "Yes", "No", "alert('you clicked yes');", "alert('you clicked no');");
dialog_buttons[button_yes]();
dialog_buttons[button_no]();
btn_yes_js();
btn_no_js();
下面是我如何调用函数的:
function confirm_yes_no(xtitle,msg, btn_yes_txt, btn_no_txt, btn_yes_js, btn_no_js)
{
var button_yes = btn_yes_txt;
var button_no = btn_no_txt;
var dialog_buttons = {};
dialog_buttons[button_yes] = function(){ btn_yes_js }
dialog_buttons[button_no] = function(){ btn_no_js }
$("#modal_confirm_yes_no").html(msg);
$("#modal_confirm_yes_no").dialog({
title: xtitle,
bgiframe: true,
autoOpen: false,
height: 150,
width: 300,
modal: true,
buttons: dialog_buttons
});
$("#modal_confirm_yes_no").dialog("open");
}
confirm_yes_no("Print Checks", "Would you like to print checks now?", "Yes", "No", "alert('you clicked yes');", "alert('you clicked no');");
dialog_buttons[button_yes]();
dialog_buttons[button_no]();
btn_yes_js();
btn_no_js();
如果
btn\u yes\u js
是对Javascript函数的引用,只需执行以下操作:
dialog_buttons[button_yes] = btn_yes_js;
同样对于btn\u no\u js
如果你说的是btn\u yes\u js
是一个包含js函数源的字符串,那么你似乎是-不要这样做强>
您的呼叫应该如下所示:
confirm_yes_no("Print Checks", "Would you like to print checks now?", "Yes", "No",
function() {
alert('you clicked yes');
},
function() {
alert('you clicked no');
}
);
i、 e.传入对函数的引用(本例中为匿名函数),而不是必须传递给讨厌的、可怕的、永远不会在《死亡之痛》中使用的字符串eval()
函数
看
我还要指出,您的代码最终将需要更多的工作,因为当您注册回调处理程序时,它们实际上都不会关闭或破坏对话框
实际上,您需要更多类似于:
dialog_buttons[button_yes] = function() {
$('#modal_confirm_yes_no').dialog('close').dialog('destroy');
btn_yes_js.call(ctx);
}
i、 e.一个本地函数,它干净地关闭对话框,然后调用相关的回调函数。您可能希望在回调中添加自己的
ctx
变量,该变量将成为this
的值。我认为您最好在被调用函数中添加警报,并将要在警报中输出的消息传递给函数。您可以为最后两个参数传递实际函数
function handleNo() {
alert('you clicked no');
}
function handleYes() {
alert('you clicked yes');
}
confirm_yes_no(
"Print Checks",
"Would you like to print checks now?",
"Yes",
"No",
handleYes,
handleNo);
function confirm_yes_no(xtitle,msg, btn_yes_txt, btn_no_txt, yesCallBack, noCallBack)
{
var button_yes = btn_yes_txt;
var button_no = btn_no_txt;
var dialog_buttons = {};
dialog_buttons[button_yes] = yesCallBack;
dialog_buttons[button_no] = noCallBack;
$("#modal_confirm_yes_no").html(msg);
$("#modal_confirm_yes_no").dialog({
title: xtitle,
bgiframe: true,
autoOpen: false,
height: 150,
width: 300,
modal: true,
buttons: dialog_buttons
});
$("#modal_confirm_yes_no").dialog("open");
}
然后在主函数中更改这两行
dialog_buttons[button_yes] = btn_yes_js;
dialog_buttons[button_no] = btn_no_js;
将它们作为函数传递
function confirm_yes_no(xtitle,msg, btn_yes_txt, btn_no_txt, btn_yes_js, btn_no_js)
{
var button_yes = btn_yes_txt;
var button_no = btn_no_txt;
var dialog_buttons = {};
dialog_buttons[button_yes] = btn_yes_js
dialog_buttons[button_no] = btn_no_js
$("#modal_confirm_yes_no").html(msg);
$("#modal_confirm_yes_no").dialog({
title: xtitle,
bgiframe: true,
autoOpen: false,
height: 150,
width: 300,
modal: true,
buttons: dialog_buttons
});
$("#modal_confirm_yes_no").dialog("open");
}
请致电:
confirm_yes_no("Print Checks", "Would you like to print checks now?", "Yes", "No", function() { alert('you clicked yes'); }, function() { alert('you clicked no'); } );
只使用内置的ok/cancel提示符会简单得多:
if (window.confirm("Would you like to print checks now?")) {
alert("You clicked yes");
} else {
alert("You clicked no");
}
您不应该接受JS字符串,而应该只接受回调
function confirm_yes_no(xtitle,msg, btn_yes_txt, btn_no_txt, yesCallBack, noCallBack)
{
var button_yes = btn_yes_txt;
var button_no = btn_no_txt;
var dialog_buttons = {};
dialog_buttons[button_yes] = yesCallBack;
dialog_buttons[button_no] = noCallBack;
$("#modal_confirm_yes_no").html(msg);
$("#modal_confirm_yes_no").dialog({
title: xtitle,
bgiframe: true,
autoOpen: false,
height: 150,
width: 300,
modal: true,
buttons: dialog_buttons
});
$("#modal_confirm_yes_no").dialog("open");
}
那么你可以这样称呼它
confirm_yes_no("Print Checks",
"Would you like to print checks now?", "Yes", "No",
function() {alert('you clicked yes');},
function() {alert('you clicked no');}
);
改为
dialog_buttons[button_yes] = btn_yes_js;
dialog_buttons[button_no] = btn_no_js;
并直接发送函数
confirm_yes_no("Print Checks", "Would you like to print checks now?", "Yes", "No",
function() {
alert('you clicked yes');
},
function() {
alert('you clicked no');
});
您可以通过调用函数来执行它:
function confirm_yes_no(xtitle,msg, btn_yes_txt, btn_no_txt, btn_yes_js, btn_no_js)
{
var button_yes = btn_yes_txt;
var button_no = btn_no_txt;
var dialog_buttons = {};
dialog_buttons[button_yes] = function(){ btn_yes_js }
dialog_buttons[button_no] = function(){ btn_no_js }
$("#modal_confirm_yes_no").html(msg);
$("#modal_confirm_yes_no").dialog({
title: xtitle,
bgiframe: true,
autoOpen: false,
height: 150,
width: 300,
modal: true,
buttons: dialog_buttons
});
$("#modal_confirm_yes_no").dialog("open");
}
confirm_yes_no("Print Checks", "Would you like to print checks now?", "Yes", "No", "alert('you clicked yes');", "alert('you clicked no');");
dialog_buttons[button_yes]();
dialog_buttons[button_no]();
btn_yes_js();
btn_no_js();
OP并没有回答真正的问题,而是想知道如何指定发生事件时要运行的代码。您可以根据按下哪个按钮来运行代码。这是一个模式拨号,询问一个问题,有两个按钮,与OP提出的相同,这似乎是要解决的问题的重点。就按钮名称而言,这种方法的灵活性稍差一些,但我提出了它,因为它非常简单,如果您对按钮名称的OK/cancel满意的话,它可以用更少的代码完成相同的工作。有时人们不知道更简单的选项。不解决实际问题的建议最好作为注释而不是答案,显示为按钮的文本的灵活性显然是要求的一部分,因为函数将标签作为参数。@jfriend00
window.confirm()的另一个问题
是因为它完全阻止了事件队列,从而阻止了其他任何事情的处理(例如计时器任务)。请更正它是否阻止。我认为这就是用户流的意图(变量被命名为“modal”)。应考虑更简单且解决相同问题的替代建议。我对OP选择其他东西没意见,只是觉得这是值得的,因为它太简单了。不能将有用的代码示例放在注释中。我认为你的观点已经提出,现在也有其他解决办法。OP可以决定他们喜欢什么。我已经上了这么一个星期了,学习我的方法-试图帮助你。@Alnitak-如果你要求回调在不同的情况下是不同的,那么就对了。查看您的警报示例,我认为这是一条简单的消息。@Ronedog我更新了小提琴,以包含最后两段,显示如何关闭对话框,然后调用回调。