6

我正在尝试解决 jQuery 教科书提供的问题。它读起来像这样

“即使没有输入数据也会提交数据,要解决此问题,您必须停止提交按钮的默认操作。为此,请在文件末尾的 if 语句中编写 event 对象的 preventDefault 方法,如图10-6

注意* 这是 10-6 中的代码,当我按照本书的建议将其标记到代码的末尾时,这对我不起作用。

if (isValid == false) { event.preventDefault(); }

请记住,用于事件对象的名称必须与用于提交事件处理程序的参数名称相同。

注意*提交事件处理程序看起来像这样

    $("#email_form").submit(
    function() {
        var isValid = true;

                      // the script proceeds to validate each text field accordingly                    bla bla bla

现在,用空字段再次测试。这应该在除邮政编码字段之外的每个字段的右侧显示“此字段是必需的”。

我的问题是我的 preventDefault 不起作用,无论我尝试什么,它仍然会提交。

解释图 10-6 的文本中的一个有趣注释可能会有所帮助,但我不太明白,如下所示。

“这里你看到一个最终的 if 语句,如果 isValid 变量为 false,则为 true,这意味着一个或多个字段无效。在这种情况下,执行 event 对象的 preventDefault 方法。这个对象被传递给函数提交事件处理程序作为参数存储在此处理程序的第一行的事件变量中。如果在将一个或多个字段提交到服务器时不使用 preventDefault 方法,则表单将提交到服务器,因为这是它的默认操作。”

任何见解将不胜感激。

4

2 回答 2

9

event变量是必须传递给您的处理程序的东西。您的匿名函数function(){}需要接受event变量:

$("#email_form").submit(function(event){
    var isValid = true;

    // do all your validation here
    // potentially if one of the fields is empty 
    // isValid will be set to false

    if (!isValid) {
        event.preventDefault();
    }
});
于 2013-02-27T02:17:44.573 回答
0

我今天在课堂上了解到,答案实际上是这样的。

$("#email_form").submit(
function(event) {
    var isValid = true;

在验证结束时需要我的功能(如下)......

if (isValid == false) { event.preventDefault(); }

与我的提交按钮的事件处理程序中的事件进行交互。

于 2013-02-27T20:08:17.520 回答