我有一些代码行。为什么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
}
}
});
答案 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()吗?