Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.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
在IE7中的服务器上呈现奇怪的JQuery验证错误(';this.0.form';为null或不是对象)_Jquery_Tomcat_Servlets_Jquery Validate - Fatal编程技术网

在IE7中的服务器上呈现奇怪的JQuery验证错误(';this.0.form';为null或不是对象)

在IE7中的服务器上呈现奇怪的JQuery验证错误(';this.0.form';为null或不是对象),jquery,tomcat,servlets,jquery-validate,Jquery,Tomcat,Servlets,Jquery Validate,我正在尝试实现一个自定义验证函数,该函数要求一组字段要么全部填充,要么全部为空。我用过它,当它出现时,一切似乎都正常 我在本地运行它。当我把它放在tomcat服务器上,并从servlet中呈现时,在IE7中运行时会出现以下错误,在Firefox中,它在这两种情况下都可以正常工作 “this.0.form”为null或不是对象 jquery.validate.js第97行 您可以找到验证插件。相关代码如下。它进入注释行中的错误 /* * Form Validation */ $.val

我正在尝试实现一个自定义验证函数,该函数要求一组字段要么全部填充,要么全部为空。我用过它,当它出现时,一切似乎都正常 我在本地运行它。当我把它放在tomcat服务器上,并从servlet中呈现时,在IE7中运行时会出现以下错误,在Firefox中,它在这两种情况下都可以正常工作

“this.0.form”为null或不是对象 jquery.validate.js第97行

您可以找到验证插件。相关代码如下。它进入注释行中的错误

 /*
  * Form Validation
  */
 $.validator.addMethod("notEmpty", function (value, element) {
     return value !== "";
 }, "This value cannot be empty");

 $.validator.addMethod("all", function (value, element, options) {

    var row = $(element).closest(options[1]);
    var empties_in_group = $(options[0], row).filter(function() {
        return $(this).val() === "";
    }).length;

    //Either all have to be empty or filled
    var valid = empties_in_group === 0 || empties_in_group === $(options[0], row).length;

    if (!$(element).data('reval')) {
        var fields = $(options[0], row);
        fields.data('reval', true).valid(); //Error happens in this line
        fields.data('reval', false);
    }
    return valid;
 }, "Either none or all fields in this section have to be filled");

$.validator.addClassRules({
    percentage: {
        digits: true,
        min: 0,
        max: 100
    },
    cpu_util:   {all: [".cpu_util", 'tr']},
    cpu_load:   {all: [".cpu_load", 'tr']},
    disk_used:  {all: [".disk_used", 'tr']},
    disk_cons:  {all: [".disk_cons", 'tr']},
    time_field: {all: [".time_field", 'li']},
    log_msgs:   {all: [".log_msgs", 'li']},
    log_unchng: {all: [".log_unchng", 'td']},
    log_ex:     {all: [".log_ex", 'td']},
    mem_free:   {all: [".mem_free", 'tr']},
    mem_used:   {all: [".mem_used", 'tr']},
    cpu_mem:    {all: [".cpu_mem", 'tr']},
    cpu_util:   {all: [".cpu_util", 'tr']},
    swap:       {all: [".swap", 'tr']}
});
有什么想法吗

编辑:文件加载到标题中:

<head>
  <link rel="stylesheet" type="text/css" href="<rootfolder>/css/style.css"/>
  <script type="text/javascript" src="<rootfolder>/js/jquery-1.6.2.min.js"></script>
  <script type="text/javascript" src="<rootfolder>/js/jquery.timebox.js"></script>
  <script type="text/javascript" src="<rootfolder>/js/jquery.validate.js"></script>
  <script type="text/javascript" src="<rootfolder>/js/jquery.qtip.min.js"></script>
  <script type="text/javascript" src="<rootfolder>/js/script.js"></script>
</head>

脚本js中的Javascript加载方式如下:

$(document).ready(function() {
  <JQUERY AND JAVASCRIPT THINGS>
});
var form = $("#divThatWrapsTheForm").children("#Form"); //to this

form.removeData("validator");
$.validator.unobtrusive.parse(form);


if (!$(form).valid()) {
    return;
}
$(文档).ready(函数(){
});

编辑2:我也尝试在正文底部使用javascript,但仍然有相同的错误。

jquery没有呈现在服务器端。原始javascript文件被推送到客户端,客户端浏览器执行您编写的任何代码,所有这些都不需要服务器的帮助


因此,除非tomcat在将代码发送到客户端之前确实在重写代码,否则我严重怀疑这是因为服务器端问题。

如果您所需要做的只是确保填写了必填字段。那么代码很简单,省去了复杂的插件。你所需要做的就是这样:

注意:简单版本所有操作都确保有输入或没有输入

function validateForm() {
    var req = $('.required');
    $.each(req, function(index, value){
        if($(value).val() != null &&  $(value).val().length < 1){
            markError($(value), "Cannot be empty");
            error=true;
        } else {
            unmarkError($(value));
        }
    });

    function markError(ele, msg) {
        $(ele).prev().addClass("alert");
        var msgSpan = $(ele).next('span.errorMsg');
        if(msgSpan.length > 0) {
            $(msgSpan).text(msg);
        } else {
            $(ele).after("<span class='errorMsg'>"+msg+"</span>");
        }
    }

    function unmarkError(ele) {
        $(ele).prev().removeClass("alert");
        $(ele).next('span.errorMsg').remove();
    }
}

我一直在用IE8、最新的FF和Chrome测试我的MVC应用程序,一切都很好。当我尝试使用IE7标准运行IE时,很多都不起作用,包括一些jquery验证

问题就出在错误消息中,表单为空

在我的案例中,我是这样验证表单的

var form = $("#divThatWrapsTheForm #Form"); //changed this line

form.removeData("validator");
$.validator.unobtrusive.parse(form);


if (!$(form).valid()) {
    return;
}
显然,IE 7不喜欢我定义表单变量的方式,因此我将其修改为:

$(document).ready(function() {
  <JQUERY AND JAVASCRIPT THINGS>
});
var form = $("#divThatWrapsTheForm").children("#Form"); //to this

form.removeData("validator");
$.validator.unobtrusive.parse(form);


if (!$(form).valid()) {
    return;
}

希望这有帮助。

哪一行是97?如果您的所有标准都是空的或不是空的,那么这就太过分了。使用jQuery做一些简单的事情,您可以获取表单中的所有输入元素,并在它们上附加一个模糊侦听器进行迭代。在“模糊”中,根据指定的css类验证值。@Ali不,我有一个大表单。它在一个表中,因为你基本上是在编辑表格数据。某些字段组具有必须全部填充或不填充的属性。我用不同的类来标记它们:cpu\u util、cpu\u load等等。如果他们正在使用this.0.form获取表单以获取页面中的第一个表单,则尝试将其替换为
document.forms[0]
除此之外,没有其他可推荐的内容。是的,我知道,但我认为这可能相关,当我将页面下载到我的计算机并在本地运行它时,它不会出现任何问题。您是否可以更新原始帖子,说明如何将javascript包含到表单中?如果您能够下载该文件并在本地成功运行,我很确定这是一个代码问题,即如何包含该文件,而不是服务器出现问题否,我有一个大表单。它在一个表中,因为你基本上是在编辑表格数据。某些字段组具有必须全部填充或不填充的属性。我用不同的类来标记它们:cpu_util、cpu_load等。正如前面所说的,非常简单的例子,您可以做的是将选择器更改为
$(“div.required input,div.required textarea,div.required select”)
并且每次迭代字段并设置布尔值
textfund
textfotfound
。如果两者都为真,则抛出验证错误。您误解了。这整组字段(例如class.cpu\u load)可以保持为空,但如果填充其中一个字段,则必须同时填充其余字段。此外,某些字段还有许多其他验证规则,例如,它们只能是数字,介于0和100之间。这就是为什么我要使用验证插件,它使很多事情变得更容易。我还需要它是实时的。因此,我需要更新所有字段。