我目前正在用JavaScript编写自定义对话框脚本(显示带有按钮,标题等选项的对话框),从而模仿C#的MessageBox.Show()方法。但是,我在从函数中正确返回值时遇到问题。
例如,我创建的Show()方法是静态的,并通过单击按钮调用如下:
<input type="button" onclick="return MessageBox.Show(dialogueMessage, 'Really Delete?', 'confirm', false)") />
调用MethodBox.Show()函数后,将显示该对话框。我想要这个选项,以便当用户点击“是”按钮时,MessageBox.Show()函数返回true,否则返回false。我创建(动态)按钮的代码如下:
var yesButton = document.createElement('input');
yesButton.setAttribute('type', 'button');
yesButton.setAttribute('value', 'Yes');
yesButton.setAttribute('name', 'button-yes');
yesButton.onclick = function() { MessageBox.Hide(); return true; };
var noButton = document.createElement('input');
noButton.setAttribute('type', 'button');
noButton.setAttribute('value', 'No');
noButton.setAttribute('name', 'button-no');
noButton.onclick = function() { MessageBox.Hide(); return false; };
但是,正如您所理解的那样,'return false'/'return true'语句指的是按钮本身,而不是函数(MessageBox.Show())。我想知道的是,如果有一种方法我可以使用当用户点击其中一个按钮时(并且仅当用户点击其中一个按钮时)返回该功能,以便可以正确使用点击调用该功能的按钮。
我很难解释我想要实现的目标,但上述内容应该是有道理的。
谢谢, 本。
答案 0 :(得分:1)
您执行此操作的方式不会让您返回任何值,因为该函数在创建对话框后刚刚完成。 我假设您要在按下时取消按钮的默认操作...请执行以下操作。
如果按钮,在Javascript中是var theButton 。
theButton.addEventListener('click',
function(e)
{
e.preventDefault(); // So clicking will not fire any submit
// if the button was inside a form element.
MessageBox.Show(dialogueMessage, 'Really Delete?', 'confirm', false, this);
// Here I send a button reference to be able to fire the event ______↑
// you must add an extra parameter to hold it then...
} 1);
然后在MessageBox.Show()方法内部执行以下操作,假设 this 关键字传递为buttonRef .-
var yesButton = document.createElement('input');
yesButton.setAttribute('type', 'button');
yesButton.setAttribute('value', 'Yes');
yesButton.setAttribute('name', 'button-yes');
yesButton.onclick = function() { MessageBox.Hide(); butonRef.click(); };
var noButton = document.createElement('input');
noButton.setAttribute('type', 'button');
noButton.setAttribute('value', 'No');
noButton.setAttribute('name', 'button-no');
noButton.onclick = function() { MessageBox.Hide(); };
然后,如果按下了yes,则input元素将触发一个提交事件,就像按下它一样。