JavaScript:从onclick函数内部返回所有者方法

时间:2010-06-15 15:02:50

标签: javascript

我目前正在用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())。我想知道的是,如果有一种方法我可以使用当用户点击其中一个按钮时(并且仅当用户点击其中一个按钮时)返回该功能,以便可以正确使用点击调用该功能的按钮。

我很难解释我想要实现的目标,但上述内容应该是有道理的。

谢谢, 本。

1 个答案:

答案 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元素将触发一个提交事件,就像按下它一样。