【发布时间】:2012-12-17 17:41:29
【问题描述】:
拔掉我的头发。简单的 jQuery 方法在 Safari 6 中不起作用。
以下代码块适用于我测试过的所有其他浏览器,除了 Safari 6。它在 Safari 5 和更早版本中运行良好,在 Firefox 中运行良好,在 IE 中运行良好。它在 Chrome 中也可以正常工作。
在 Safari 6 中确实会弹出警报,因此该函数仍然被触发,但其他 3 种方法中的任何一个都没有发生任何事情。
----- 更新 ----- 在几台机器上进一步测试后......我发现它只能在 Mac OSX 10.8 的 Safari 6 中工作。该代码在 OSX 10.7 中相同版本的 Safari 中运行良好。 --------------------
我正在运行 jQuery 1.8.3。我的页面验证为 HTML5。
HTML:
<div id="fileUploadFormContainer">
<form id="fileUploadForm" action="/upload/do_upload/<?=$row->project_id?>" method="post" enctype="multipart/form-data" >
<fieldset>
<label for="userfile">Attach a file</label>
<input type="file" name="userfile" id="userfile" /><br />
<input type="submit" id="fileUploadSubmit" value="Upload file" />
<img class="loadingBar" id="fileUploadLoadingBar" src="/images/indicators/ajax-loader.gif" alt="" />
</fieldset>
</form>
</div><!-- end fileUploadFormContainer -->
CSS:
.loadingBar {
display: none;
}
JavaScript:
$(function(){
// Submit Buttons
$('#fileUploadSubmit').click(function()
{
$('#fileUploadSubmit').attr('value', 'Uploading');
$('#fileUploadSubmit').fadeTo('fast',0.6);
$('#fileUploadLoadingBar').fadeIn('fast');
alert('Finished');
});
});
【问题讨论】:
-
我在这些行中看到的唯一奇怪的是
$(...).attr('value', 'Uploading');。通常你会使用$(...).val('Uploading');(或者你可以使用prop)。但我敢打赌attr无论如何都可以工作,无论如何,这并不能解释褪色...... -
很高兴看到新 SO 成员提出的问得好的问题。不错!
-
页面加载后或单击按钮后未报告 javascript 错误。
-
使用输入类型
button而不是submit怎么样?因为那样它在我的 Safari 6.0.2 上运行良好。如果您不停止提交,则提交类型会重定向您。我还从 google 获取了 jQuery:developers.google.com/speed/libraries/devguide#jquery -
@n0oitaf 是的......我也明白了。如果我将 html 输入类型从“提交”更改为“按钮”,那么我的 jQuery 将按预期工作。但这是有趣的部分。显然我的表单现在没有提交……所以我在函数的末尾添加了
$('#fileUploadForm').submit();,现在表单提交了……但是问题又回来了,其余的方法都不起作用。奇怪!