【问题标题】:Javascript not working in Safari in Mac OSXJavascript 在 Mac OSX 的 Safari 中不起作用
【发布时间】: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


【解决方案1】:

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!');
}

【讨论】:

  • 真的有必要给你的网站做插件吗?
  • 真的吗?该帖子与我的回答和处理 jQuery 中的复选框有关。随意点击向上和向左数百像素的箭头:)
  • 它实际上是一个单选按钮。你建议用什么方法来检查它的“选定”?
【解决方案2】:
if ($("#new_card").attr("checked")) {

这可能是个问题,因为检查的属性并不总是添加到输入中。 你可以试试改成

if($("#new_card:checked").length){

甚至

$('#new_card').each(function(){
if(this.checked){
}
})

如果一切都失败了

【讨论】:

    【解决方案3】:

    您是否在 Safari 中打开了控制台? -- 如果代码错误,它应该会产生错误消息,并且它有一个完整的 js 调试器,可能也会有所帮助。

    【讨论】:

    • Safari 3 或 4 的 windows 版本没有错误。我正在寻找一个 Mac 进行测试。
    猜你喜欢
    • 2017-05-25
    • 1970-01-01
    • 2017-09-03
    • 2014-05-10
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多