2014-09-11 49 views
0

我想要一些代碼行。爲什麼Mozilla Firefox首先保存圖片(),Chrome取 saveImage。即使console.log($('#param-form')。size())= 0 ??? 我使用Jquery 1.7.2。長度代替大小()它是相同的結果。使用Javascript的Chrome瀏覽器的奇怪行爲

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

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

「的.size()方法被棄用的jQuery 1.8。使用。長度屬性。」 http://api.jquery.com/size/ – 2014-09-11 11:09:46

+0

結果相同 – user3500854 2014-09-11 11:18:55

+0

顯示HTML代碼。 - > http://jsfiddle.net/ plz – 2014-09-11 11:23:34

回答

0

除了Jaroslaw所說的.size()方法被棄用爲jQuery 1.8之外,你有沒有嘗試過?

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

你測試2個不同的選擇器,你確定Chrome不會同時執行saveImage()嗎?

+0

Chrome仍然採取第二saveImage()和Mozilla採取第一 – user3500854 2014-09-11 11:24:58

1

在腳本加載時,Chrome應搜索全部全部函數聲明以聲明的順序優化/預編譯代碼內部。

如果您在運行時聲明函數,則使用=函數,只有在執行該行時才執行聲明。

因此,在你的情況下,在運行時定義函數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>

相關問題