【发布时间】:2009-09-25 21:22:25
【问题描述】:
我有一个付款页面,客户在其中输入他们的信用卡详细信息。我已经删除了所有不相关的部分。
奇怪的是,我的前端验证在 FF、IE 和 Safari for windows 上运行良好。它仅在 Mac OSX 中的 Safari 上失败。
存在问题的特定用户代理字符串:
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; en) AppleWebKit/531.9 (KHTML, like Gecko) Version/3.1.2 Safari/525.22
由于某种原因,它不会强制在提交之前同时选择月份和年份,并且后端验证会出错。
任何帮助将不胜感激。我无法重现。
代码如下:
<form action="XXXXXXXX" class="full" id="schedule_payment" method="POST">
<select name="expiration_month" id="expiration_month">
<option value="">Month</option>
<option value="01">01 - Jan.</option>
<option value="02">02 - Feb.</option>
.......
</select>
<select name="expiration_year" id="expiration_year">
<option value="">Year</option>
<option value="09">2009</option>
<option value="10">2010</option>
<option value="11">2011</option>
.........
</select>
<input type="image" id="submit_image" src="confirm-details.png" value="Submit" alt="Confirm Details">
</form>
<script type="text/javascript">
$(document).ready(function(){
$("#schedule_payment").validate({
submitHandler:function(form) {
if ($("#new_card").attr("checked")) {
if ($("#expiration_year").val() == "" || $("#expiration_month").val() == "") {
alert("Please check the expiration date.");
return;
}
var isExpired = false;
if (parseInt("20" + $("#expiration_year").val()) < 2009 ) {
isExpired = true;
} else if ( (parseInt("20" + $("#expiration_year").val()) == 2009 ) &
(parseInt($("#expiration_month").val(),10) < parseInt(09,10))) {
isExpired = true;
}
if (isExpired) {
alert("Card is expired. Please check expiration data and try again.");
return;
}
}
form.submit();
},
XXXXXX
【问题讨论】:
-
为什么它可以在 Windows 上的 Safari 中运行,但在 OSX 的 Safari 上的版本不同?他们使用不同的渲染/javascript引擎吗?
标签: javascript jquery validation safari