Javascript在Mac OSX中无法在Safari中运行

时间:2009-09-25 21:22:25

标签: javascript jquery validation safari

我有一个付款页面,客户正在输入他们的信用卡详细信息。我删除了所有不相关的部分。

奇怪的是,我的前端验证在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

3 个答案:

答案 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调试器,也可能有帮助。