0

我有这个表格:

<form id="searchForm" class="search_field" method="get" action="">
...
...
</form>

然后这个javascript:

    var form = document.getElementById("searchForm");
    form.doSearch1.onclick = searchPage;
    form.doSearch2.onclick = searchPage;
    form.showFeatureChoices.onclick = function( )
        {
            var cbs = form.featType;
            for ( var c = 0; c < cbs.length; ++c )
            {
                cbs[c].checked = false;
            }
            document.getElementById("featuresDiv").style.display = "block";
        }

function searchPage()
{
    var form = document.getElementById("searchForm");
    var searchText = form.searchBox.value.replace(/-/g,"");
    form.searchBox.value = searchText;

    if (searchText != "") 
    {
        // collect features to search for:
        var features = [ ];
        var featTypes = form.featType;
        for ( var f = 0; f < featTypes.length; ++f )
        {
            if ( featTypes[f].checked ) features.push( featTypes[f].value );
        }
        featureList = "'" + features.join("','") + "'";

        searchMsg("Searching for '" + searchText + "' ...");
        // startStatusUpdate(1000);
        // findTask.execute(findParams, showResults);
        var accord = dijit.byId("accordianContainer");
        var resultsPane = dijit.byId("resultsPane");
        accord.selectChild(resultsPane,true);

        doSearch( searchText, featureList );
    }
    else
    {
      searchMsg("No search criteria entered, enter search text");
    }   
}

如果我将此代码嵌入到与 . 相同的文件中<form...,则它可以正常工作。

但是,如果我在另一个文件中有这个 js 并用作包含文件:

<script type="text/javascript" src="Views/JS/main.js"></script>

我收到以下错误:“需要对象”,它指向这些行:

form.doSearch1.onclick = searchPage;
form.doSearch2.onclick = searchPage;

任何想法如何解决这一问题?

更多信息,上面显示的 js 代码位于名为 main.js 的文件中,该文件位于名为 JS 的文件夹中,而 Js 位于名为 Views 的文件夹中。这

非常感谢提前

4

1 回答 1

0

当您在同一页面中包含 JavaScript 代码时,它与form元素的关系在哪里?(之前还是之后?)当您引用外部 JavaScript 文件时怎么样?

在前一种情况下,代码在文件的末尾,而在后一种情况下,script参考标签在开头?

如果这是真的,那么正在发生的事情是在 DOM 准备好之前执行此代码:

var form = document.getElementById("searchForm");
form.doSearch1.onclick = searchPage;
form.doSearch2.onclick = searchPage;

如果form标签还没有被渲染到 DOM,那么第一行将找不到任何东西,随后的行将因此失败。一种方法是将script参考标签放在最后,但这对我来说似乎是一种黑客行为。有时有充分的理由将它们保留在页眉中,其中最重要的是在许多情况下对代码进行更清晰的管理。 在 DOM 准备好之前,还有其他方法可以推迟执行 JavaScript 代码。

于 2013-04-01T14:32:26.877 回答