使用Javascript的Chrome浏览器的奇怪行为

时间:2014-09-11 11:07:12

标签: javascript jquery google-chrome browser

我有一些代码行。为什么Mozilla Firefox正确地采用第一个saveImage(),Chrome采用第二个 saveImage。即使console.log($(' #param-form')。size())= 0 ??? 我使用Jquery 1.7.2。用长度代替大小()它的结果相同。

$(document).ready(function(){ 
   if ($('#catalog-image-form').size()) {
       function saveImage() {
           some logic 1
       } 
   }

   if ($('#param-form').size()) {
      function saveImage() {
         some logic 2 
      }
   }
});

3 个答案:

答案 0 :(得分:1)

可能是function hoisting的问题?

答案 1 :(得分:1)

在脚本加载时,Chrome应按照声明的顺序搜索所有全局函数声明,以优化/预编译内部代码。

如果在运行时使用 = function 声明该函数,则只有在执行该行时才会声明该声明。

因此,在您的情况下,使用 saveImage = function(){...} 在运行时定义函数。

$(document).ready(function(){ 
   if ($('#catalog-image-form').size()) {
       saveImage = function () {
           $("#input1").val("some logic 1");
       }
       function globalfunction () {
           $("#input1").val("some logic 1");
       }
   }

   if ($('#param-form').size()) {
      saveImage = function () {
         $("#input1").val("some logic 2");
      }
      function globalfunction () {
         $("#input2").val("some logic 2");
      }
   }

   if (false) {
      saveImage = function () {
         $("#input1").val("some logic 3");
      }
       function globalfunction () {
           $("#input2").val("some logic 3");
       }
   }
  
  saveImage();
  globalfunction();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

<form id="catalog-image-form">
  <input type="text" name="input1" id="input1"/>
  <input type="text" name="input2" id="input2"/>
</form>

答案 2 :(得分:0)

除了+ Jaroslaw所说的关于.size()方法被弃用为jQuery 1.8之外,你试过这个吗?

if ($('#param-form').size() > 0)

您测试了2个不同的选择器,您确定Chrome不会同时执行saveImage()吗?