【问题标题】:Unable to find error in ajax function submitting form在ajax函数提交表单中找不到错误
【发布时间】:2013-04-04 13:35:45
【问题描述】:

我有这个功能,在 IE8 中 alert 不会触发,ajax 部分根本不运行。然后尽管return false 提交表单。为什么会这样?为什么它只发生在 IE8 中?

$(document).ready(function(){
    $('form[name="DownloadForm"]').submit(function(){
        var valCases = new Array()
        valCases.push(($('input[name="firstname"]').val()!="") ? true : false )
        valCases.push(($('input[name="lastname"]').val()!="") ? true : false )
        valCases.push(($('input[name="company"]').val()!="") ? true : false )
        valCases.push(($('input[name="email"]').val()!="") ? true : false )

        alert(valCases.indexOf(false)) //this alert doesn't fire!


        if (valCases.indexOf(false)==-1) {
            $.ajax({
                url: url,
                type: 'POST',
                data: $(this).serialize(),
                beforeSend: function(){
                    //before
                },
                success: function(data) {
                    //do something
                },
                error: function(data) {
                    //error
                }
            });
            return false;
      } else {
            $('.inl-table tr').each(function(index){
                if (index==valCases.indexOf(false)) {
                    $(this).next().children('th').css('color','red');
                }
            });
            return false;
      }
      return false;
    });

});

【问题讨论】:

  • HTML 请...也许你错过了提交按钮。一旦浏览器忽略了 jquery .submit() 因为我的 HTML 中缺少 ,我遇到了这个问题
  • 表单中有一个提交类型的按钮。
  • 为什么不使用分号来终止行?这可能是错误的原因,而不是在 IE 中读取。 IE是阅读JS最差的浏览器。所以加分号再试试。

标签: javascript jquery forms form-submit


【解决方案1】:

问题可能是,这个数组函数在 IE8 中不存在:

valCases.indexOf(false)

当然,这并不能解释丢失的警报 :)
编辑:好的,我读错了你的代码。它解释了丢失的警报;)

您会在此链接下找到一个 polyfill: MDN - Array indexOf

由于您已经在使用 jQuery,您不妨使用 jQuery.inArray,它会在可用时回退到原生的 indexOf 函数。

【讨论】:

  • 它将解释丢失的警报。如果尝试执行valCases.indexOf(false) 时抛出错误,则不会显示警报。
  • 这是错误。使用 polyfill 为 IE8 提供 indexOf 函数可以修复它。
  • MDN page 提供了有关为不支持此功能的浏览器提供此功能的信息。不确定您是否想将此作为答案的一部分。
  • 不知道 Array.prototype.indexOf 函数,ie8 js引擎无法构建alert参数,因此即使alert函数也没有被触发原因:它在到达alert执行之前抛出并逃逸
  • 谢谢,@AnthonyGrist。当然,我会在我的答案中包括:)
【解决方案2】:

用掉ajax函数吧:

var dd =$(this).serialize();

在 ajax 中

data :dd,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 2012-09-13
    • 2019-01-17
    • 2017-08-11
    相关资源
    最近更新 更多