Firefox javascript错误函数“undefined”在IE中运行正常

时间:2010-12-08 16:19:07

标签: javascript cross-browser

我在firefox错误控制台中收到错误“错误:未定义submitSearchForm”

这是我的功能代码

编辑添加了完整代码

   function submitSearchForm(action,iskeyDown) {

                var oneEntered = false;

                    if(iskeyDown == null || iskeyDown == 'undefined'){
                        copyAndValidate("dobFrom", "searchCriteria.dob", "date");
                        copyAndValidate("dobTo", "searchCriteria.dobTo", "date");
                        copyAndValidate("dodFrom", "searchCriteria.dodFrom", "date");
                        copyAndValidate("dodTo", "searchCriteria.dodTo", "date");
                        copyAndValidate("searchCriteria.age", "searchCriteria.age", "integer");
                    }else{
                        copyAndValidate("dobFrom_date", "searchCriteria.dob", "date");
                        copyAndValidate("dobTo_date", "searchCriteria.dobTo", "date");
                        copyAndValidate("dodFrom_date", "searchCriteria.dodFrom", "date");
                        copyAndValidate("dodTo_date", "searchCriteria.dodTo", "date");
                        copyAndValidate("searchCriteria.age", "searchCriteria.age", "integer");
                    }



                    var elements = document.SearchForm.getElementsByTagName("INPUT");
                    for (var i = 0; i < elements.length; i++) {
                        var element = elements[i];
                        if (element != null && element.getAttribute("group") == 'searchCriteria') {
                            if (!isEmpty(element.value)) {
                                oneEntered = true;
                                break;
                            }
                        }
                    }

                if (oneEntered)

                     {

                         if (validate(document.SearchForm)) {

                                    document.SearchForm.action.value = action;
                                      document.SearchForm.submit();
                              }

                } 


                else {
                    alert("<%= bpt.getValue("CCT_ATLEASTONE_MSG") %>");
                }


            }

按钮

onclick="<%="submitSearchForm('"+SearchForm.ACTION_SEARCH +"');"%>"

再说一遍IE中的一切正常,所以代码是正确的

编辑:VALIDATION.JS验证()

function validate(thisForm) {

   window.event.returnValue = false;
   formToValidate = thisForm;
   var ret = true;
   var validationErrors = new Array();

   // get the validateable items
   // var validateThese = getValidationItems(thisForm.childNodes);
   var validateThese = getValidationItems(thisForm);
   //printValidationArray(validateThese);

   // validate them
   for (var i = 0; i < validateThese.length; i++) {
     var validationItem = validateThese[i];
     var validationError = validateMe(validationItem);
     if (validationError != "") {
       validationErrors[validationErrors.length] = validationError;
     }
   }

   // check for validation errors
   if (validationErrors.length > 0) {
     var errors = "";
     for (var j = 0; j < validationErrors.length; j++) {
         errors += validationErrors[j] + "\n";
     }
     alert("Validation Errors:\n" + errors);
     ret = false;
   } else {
     ret = true;
   }
   return ret;
 }

3 个答案:

答案 0 :(得分:1)

window.event是IE的具体内容,请看这里针对不同浏览器的(有点旧)表:

以下是官方文档:

这是另一篇文章:

答案 1 :(得分:1)

window.event(也称为event)不是JavaScript中的标准全局对象。它是一个仅限IE的“功能”。

参见this question


尝试将函数声明更改为:

function submitSearchForm(action, iskeyDown) {
    // ...
    // { <------------------------------------------------ brace removed
        if (validate(document.SearchForm)) {
            document.SearchForm.action.value = action;
            document.SearchForm.submit();
        }
    // } <-----------------------------------------------  brace removed
}

JavaScript中的大括号与Java中的大括号不同。根据它们的位置,它们意味着不同的东西。示例:this question

我猜测submitSearchForm函数声明中的语法错误是你问题的根源。


我仍然不确定您发布的代码实际上是浏览器看到的代码,但如果是这样,请尝试以下操作:

function submitSearchForm(action, iskeyDown) {
    var oneEntered = false;

    if (iskeyDown === null || typeof iskeyDown === 'undefined') {
        copyAndValidate("dobFrom", "searchCriteria.dob", "date");
        copyAndValidate("dobTo", "searchCriteria.dobTo", "date");
        copyAndValidate("dodFrom", "searchCriteria.dodFrom", "date");
        copyAndValidate("dodTo", "searchCriteria.dodTo", "date");
        copyAndValidate("searchCriteria.age", "searchCriteria.age", "integer");
    } else {
        copyAndValidate("dobFrom_date", "searchCriteria.dob", "date");
        copyAndValidate("dobTo_date", "searchCriteria.dobTo", "date");
        copyAndValidate("dodFrom_date", "searchCriteria.dodFrom", "date");
        copyAndValidate("dodTo_date", "searchCriteria.dodTo", "date");
        copyAndValidate("searchCriteria.age", "searchCriteria.age", "integer");
    }

    var elements = document.SearchForm.getElementsByTagName("INPUT");
    for (var i = 0; i < elements.length; i++) {
        var element = elements[i];
        if (element !== null && element.getAttribute("group") === 'searchCriteria') {
            if (!isEmpty(element.value)) {
                oneEntered = true;
                break;
            }
        }
    }

    if (oneEntered)
    {
        if (validate(document.SearchForm)) {

            document.SearchForm.action.value = action;
            document.SearchForm.submit();
        }
    }

    else {
        alert('<%= bpt.getValue("CCT_ATLEASTONE_MSG") %>');
    }
}

答案 2 :(得分:0)

我有类似的错误,只是解决了同样的问题 表单标记应位于<html><body>标记下。例如<html><body><form></form></body></html>

如果您刚刚使用了<form></form>标记并尝试提交,那么它在旧版本的mozill中会出错,而它在较新版本和其他浏览器中有效。