Javascript 中的函数返回行为

Posted

技术标签:

【中文标题】Javascript 中的函数返回行为【英文标题】:Function Return Behavior in Javascript 【发布时间】:2014-09-22 15:21:36 【问题描述】:

我有一个<a href='...'>link</a>,如果他们单击它,我想调用自定义警告,然后选择“确定”或“取消”按钮,html 中的底层将采取适当的操作。如果“确定”则默认操作,如果“取消”则不执行任何操作。

HTML代码中的代码是:

<div id="dialogoverlay"></div>
<div id="dialogbox">
<div>
    <div id="dialogboxhead"></div>
    <div id="dialogboxbody"></div>
    <div id="dialogboxfoot"></div>
</div>
</div>

<a href='sumcodehere' return onclick=\"javascript: return Warn.render(\'This operation cannot be reversed.\')\"><img></a>

Javascript代码如下:

<script>
function Warn()  
    this.render = function(dialog)  
    var winW = window.innerWidth; 
     var winH = window.innerHeight; 
     var dialogoverlay = document.getElementById('dialogoverlay'); 
     var dialogbox = document.getElementById('dialogbox'); 
     dialogoverlay.style.display = "block"; 
     dialogoverlay.style.height = winH+"px"; 
     dialogbox.style.left = (winW/2) - (550 * .5)+"px"; 
     dialogbox.style.top = "300px"; 
     dialogbox.style.display = "block"; 
     document.getElementById('dialogboxhead').style.background = "url('../images/warningHead.gif') no-repeat";
    document.getElementById('dialogboxhead').style.height = "30px";
            document.getElementById('dialogboxbody').style.background = "#fbfab9";
     document.getElementById('dialogboxbody').innerHTML = dialog; 
            document.getElementById('dialogboxfoot').style.background = "#fbfab9";
     document.getElementById('dialogboxfoot').innerHTML = '<button onclick="return      Warn.ok(); return false">Go Ahead and Delete</button>&nbsp;<button onclick="return Warn.cancel(); return true">Get Me Out Of Here!</button>'; 
            return false;

this.ok = function()  
    document.getElementById('dialogbox').style.display = "none"; 
    document.getElementById('dialogoverlay').style.display = "none"; 
            return true;
 
this.cancel = function()  
    document.getElementById('dialogbox').style.display = "none"; 
    document.getElementById('dialogoverlay').style.display = "none"; 
            return false;
   

我在 Firefox 中尝试此操作,显示的行为是任一按钮都会弹出警告对话框,但单击时这两个按钮似乎都返回“false”。

【问题讨论】:

首先,&lt;a&gt; 的 HTML 存在一些问题。 onclick 中似乎存在未知的return 属性、不必要的标签和引用错误。在 Warn() 中的 JS 部分 this 不是您认为的那样。看起来你在这里混合了objects 和functions。 好的...这就是我需要的反馈...应该让它做我正在寻找的东西? 【参考方案1】:

首先需要修复 HTML:

<a href="sumcodehere" onclick="return warn.render('This operation cannot be reversed.')">
    <img src="..."  />
</a>

(删除了未知的return 属性并修复了onclick 属性的引用。)

那么在 JS 中,Warn() 看起来像一个构造函数,就这样使用它,create a global object:

var warn = new Warn();

注意变量名开头的小写字母。在内联处理程序中使用相同的变量。

不过,将事件侦听器附加到元素的更好方法是使用 addEventListener 方法。

【讨论】:

引用的原因是因为这是由 Perl 代码内部的“打印”语句生成的代码......因为它包含在引号内,所以必须对引号进行转义。 @D.LawrenceBarksdale 好吧,帖子中没有提到 Perl。无论如何,我已经发布了最终解析的 HTML。你让事件监听器工作了吗?

以上是关于Javascript 中的函数返回行为的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的Generator函数

面试中的JavaScript之函数对象数组.md

javasc面向对象编程

atan2 函数在 javascript 和 Excellsheet 中的行为不同

Javascript 的 search() 函数行为不正常

数组排序中的 JavaScript 与 PHP