【问题标题】:Different "return null" results in Chrome and FirefoxChrome和Firefox中不同的“返回null”结果
【发布时间】:2015-04-24 19:42:50
【问题描述】:

给定以下代码:

jQuery(document).ready(function($) {
      $('[name="clickableTD"]').click(function() {
            window.document.location = $(this).attr("href");
      });
});


function Add(id) {
  
	
    var stock = "2";
	
    var quantity = prompt("SELECT QUANTITY:", 1);
  
    if (quantity == null) {
        return null;
    }
  
    else if (quantity <= stock) {
        alert("Good");
    }
	
	else if (quantity > stock) {
        alert("Over");
	}
	
	else if (isNaN(quantity)) {
        alert("NaN");
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>


<table border="1">
  <tr>
    <td name="clickableTD" href="javascript:Add('1')">
      <a>Click</a>
    </td>
  </tr>
</table>

如果用户使用 Chrome 作为浏览器返回空值(通过单击取消),则不会发生任何预期的事情。

但如果用户使用的是 Firefox,他将被重定向到 URL Add() 并在屏幕上显示 null 作为文本字符串。

为什么 Firefox 的反应与 Chrome 不同?

【问题讨论】:

  • 请展示整个代码,以便我们了解这个函数是如何使用的。
  • 什么是function_name(),它与您发布的代码有什么关系?
  • @adamdc78 类型与它有什么关系,他没有测试?
  • 你还没有显示Function_Name()是如何被调用的。
  • 你知道 SO 现在有一个内置的 jsfiddle 替代品,不是吗?点击 SO 编辑器中的[ &lt; &gt; ] 工具打开 sn-ps 编辑器,您可以在其中创建可执行的 HTML/JS。

标签: javascript google-chrome firefox cross-browser


【解决方案1】:

我一直无法找到有关javascript: URL 工作原理的详细规范,以及当代码返回非字符串或未定义的内容时它们应该做什么。在这种情况下,Chrome 和 FireFox 似乎采取了不同的方法。 Chrome 将它们视为undefined,并且不会更改页面内容。 FF 做了很多事情:如果它返回null,它会显示字符串null;如果它返回具有单个属性的对象,则显示该属性的值。

使用return void(0)return undefined 代替null 以获得更好的浏览器之间的兼容性。

【讨论】:

  • 我可以删除 if quantity == null 子句。但是为什么根据浏览器会有不同的反应呢?
猜你喜欢
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多