我有一个付款页面,客户正在输入他们的信用卡详细信息。我删除了所有不相关的部分。
奇怪的是,我的前端验证在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
答案 0 :(得分:2)
I倾向于喜欢这种样式的复选框:
if($('#your_checkbox_id').is(':checked')) {
alert('checked!');
} else {
alert('not checked!');
}
这是检查复选框的另一种方法:
if($('#your_checkbox_id:checked').length) {
alert('checked!');
} else {
alert('not checked!');
}
答案 1 :(得分:1)
if ($("#new_card").attr("checked")) {
这可能是一个问题,因为检查的属性并不总是添加到输入中。 您可以尝试将其更改为
if($("#new_card:checked").length){
甚至
$('#new_card').each(function(){
if(this.checked){
}
})
如果一切都失败了
答案 2 :(得分:0)
您是否在Safari中打开了控制台? - 如果代码错误,它应该产生错误消息,并且它有一个完整的js调试器,也可能有帮助。