Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 提交和单击之间的差异_Jquery_Forms_Button_Submit_This - Fatal编程技术网

Jquery 提交和单击之间的差异

Jquery 提交和单击之间的差异,jquery,forms,button,submit,this,Jquery,Forms,Button,Submit,This,看看这个: $('form).submit(function (event) { $(':input.required').trigger('blur'); var num = $('.warning', this).length; alert(num);//Focus here! if (num) { event.preventDefault(); }; }); 如果有5个必填文

看看这个:

$('form).submit(function (event) {
        $(':input.required').trigger('blur');
        var num = $('.warning', this).length;
        alert(num);//Focus here!
        if (num) {
            event.preventDefault();
        };

    });
如果有5个必填文本框为空,那么当单击submit按钮[ID:button1]时,num为5。触发5个文本框后,发现5个错误,代码运行良好

同样的按钮[ID:button1]

$('#button1').click(function (event) {
        $(':input.required').trigger('blur');
        var num = $('.warning', this).length;
        alert(num); //Focus here!
        if (num) {
            event.preventDefault();
        };

    });
在本例中,num为0。似乎触发功能没有很好地或及时地工作

有人能告诉我为什么吗?
多谢各位

我相信这是对“这个”的引用。这是JavaScript和许多其他语言中的一个重要特性。当您在第一个示例中使用它时,它正在表单(this)中搜索具有“warning”类的子元素。在第二个示例中,它在按钮中搜索子元素。你可以用

var num = $('.warning').length;
查找该类页面上的所有元素。如果您需要将查找限制为您的表单的子级,请尝试

var num = $('form#myformid').find('.warning').length;

您的第一个示例,附加到表单的提交操作,应该足够了。单击该按钮将导致提交事件,因此第二个事件处理程序是多余的(如果用户通过在字段中按enter键提交表单,则不会触发该事件处理程序)。

在您的示例2中,此
的上下文不同:

 var num = $('.warning', this).length;
按钮内部没有警告元素,因此在第二个示例中计数为0

最好在两个地方都使用此选项进行直接比较:

var num = $('form .warning').length;

在第二段代码中,您正在调用

$(':input.required').trigger('blur');
在你的按钮上(#按钮1)。您应该引用您的表单,因为现在它正在该按钮内查找输入