【问题标题】:Only submit AJAX form if the variable is true仅当变量为 true 时才提交 AJAX 表单
【发布时间】:2013-06-30 21:23:20
【问题描述】:
$(function () {
  $('#submit').submit(function() {

    var isValid = document.getElementById("form-setting").checkValidity();

    var data = {};
    data.id = $("#id").val();
    data.title = $("#title").val();
    data.content = $("#content").val();
    data.author = $("#author").val();
    data.email = $("#email").val();

    if (isValid) {

    $.ajax({
      type: 'POST',
      data: JSON.stringify(data),
      contentType: 'application/json',
      url: '/admin/setting',
      success: function (data) {
        console.log('success');
        console.log(JSON.stringify(data));
      }
    });
    }
  });
});

所以我有上面的代码,我将在其中获取用户填写的字段的所有值,并且只有在所有内容都填写并验证后才将对象发送到 node.js 服务器。

这里的问题是,如果我有 isValid 检查,根本没有任何东西发送到服务器。

事实上,if 语句中根本没有发生任何操作,因为我尝试在其中放入一些 alert 并且根本没有显示任何内容。

【问题讨论】:

  • 什么是checkValidity()
  • 我不会依赖checkValidity,因为它并非在所有浏览器上都实现。

标签: jquery ajax node.js


【解决方案1】:

尽量防止表单提交处理程序的默认行为:

$(function () {
    $('#submit').submit(function (e) {

        var isValid = document.getElementById("form-setting").checkValidity();
        alert(isValid); //<<< ALERT HERE
        var data = {};
        data.id = $("#id").val();
        data.title = $("#title").val();
        data.content = $("#content").val();
        data.author = $("#author").val();
        data.email = $("#email").val();

        if (isValid) {
            alert('PASS'); //<<< ALERT HERE
            $.ajax({
                context: this, //use for success callback
                type: 'POST',
                data: JSON.stringify(data),
                contentType: 'application/json',
                url: '/admin/setting',
                success: function (data) {
                    console.log('success');
                    console.log(JSON.stringify(data));
                    //this.submit();  //uncomment this line if you want to submit form
                }
            });
        }
        e.preventDefault();
    });

});

【讨论】:

  • 也许我的问题不清楚,但如果你检查第 13 行,它根本不会进入检查isValid 的块:(
  • 我认为问题在于 checkValidity 仅适用于 GET 方法:(
【解决方案2】:
if (isValid) {
  // send your ajax call
  return false; // plus don't want your form being submited since you allready submited it through ajax 
}
else{
  return false; // since you want to prevent the submission
}

但更好的选择是根本不使用表单,而是在一个简单的按钮上添加一个监听器

【讨论】:

  • 我使用return false 来阻止提交,但您可能必须致电e.preventDefault(); 才能这样做。 (我不确定)
  • 也许我的问题不清楚,但如果你检查第 13 行,它根本不会进入检查isValid 的块:(
  • @roasted 它为我返回 true
  • 这个函数checkValidity()是什么?顺便说一句,你应该展示你是如何尝试调试它的,因为 isValid 为真,条件 if(...) 达到,我认为你调试错了
  • OP 肯定做错了什么。对不起,犯了一个错误,我会在我的答案下方发表评论,而不是你的
猜你喜欢
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多