0

我有一个带有一些文本输入和一个文件类型输入的表单,我尝试在其中验证所选文件是否为 PDF。我这样做是这样的:

$("#myform").bind("submit", function() {
    var ext = $('#file_input').val().split('.').pop().toLowerCase();
    if($.inArray(ext, ['pdf']) == -1) {
        alert('ERROR!');
    }
});

但是在上面的代码部分中缺少一个 - 如果除了文件输入(让文件是 DOC)之外的所有输入都有效(=> 文件输入无效)并且我点击提交按钮,然后显示警告信息错误!,但表单已发送。

如果文件类型无效,我如何“停止”发送表单?

4

4 回答 4

2

在绑定到事件的 jQuery 回调函数中,您有两个选项。

您可以将对事件的引用传递给匿名函数并调用e.preventDefault()

$('#myform').bind('submit', function(e) {
    e.preventDefault();

    // Your code
});

e.preventDefault()阻止默认功能(在这种情况下,提交表单)。

或者您可以return false既阻止默认功能阻止事件冒泡;和调用一样e.preventDefault(); e.stopPropagation()

于 2012-07-09T13:41:03.817 回答
2

尝试这个:

$("#myform").bind("submit", function(e) {
    var ext = $('#file_input').val().split('.').pop().toLowerCase();
    if($.inArray(ext, ['pdf']) == -1) {
      e.preventDefault(); //Prevents the default action which is form submit
      alert('ERROR!');
    }
});
于 2012-07-09T13:39:03.823 回答
2

您可以通过执行以下操作来缩短代码:

if (!(/\.pdf$/i).test($('#file_input').val())) {
  // not valid, do what you like here
  // return false to prevent submit
  return false;

通过返回 false 来阻止表单提交;表单提交事件上的 preventDefault 在 IE 7/8 中不起作用,返回 false 就可以了。

于 2012-07-09T13:40:23.550 回答
0

你有两种方法:

  1. 保持您的代码不变并添加return false

    $("#myform").bind("submit", function() {
    var ext = $('#file_input').val().split('.').pop().toLowerCase();
    if($.inArray(ext, ['pdf']) == -1) {
        alert('ERROR!');
        return false;
    }
    });
    
  2. 更改函数签名以接受事件并使用 preventDefault():

     $("#myform").bind("submit", function(e) {       
    var ext = $('#file_input').val().split('.').pop().toLowerCase();
    if($.inArray(ext, ['pdf']) == -1) {         
      alert('ERROR!');
      e.preventDefault();
    }
    });
    
于 2012-07-09T13:42:22.787 回答