0

我有一个输入表格

<input id="txtSearch" class="txtSearch" name="SearchPhraseText" type="text"http value="<%= ServiceSite.Resources.Resources.SITEMATER_ENTER_SEARCH_TERM %>" onfocus="handleSearchFocus(this)" onblur="handleSearchBlur(this)" onkeypress="if (event.keyCode == 13 ) {search();}"/>

当我在我的 javascript 中将以下内容添加到 $(document).ready 时。

if ( window.location.search.indexOf( "search" ) != -1){
    $('#txtSearch').val( "<%= Session["SearchPhrase"] %>"v);
}

鉴于我在我的 javascript 中的其他地方有这个

     function handleSearchFocus(searchBox) {

        if ($(searchBox).val() == "<%= ServiceSite.Resources.Resources.SITEMATER_ENTER_SEARCH_TERM%>") {
           $(searchBox).val("");
           $(searchBox).css("color", "black");
        }

    }

    function handleSearchBlur(searchBox) {
        if ($(searchBox).val() == "" ) {
           $(searchBox).css("color", "gray");
           $(searchBox).val("<%= ServiceSite.Resources.Resources.SITEMATER_ENTER_SEARCH_TERM%>"); //should reference config file
        }

    }

这两个处理焦点和模糊的函数不再起作用。当我单击输入框或单击离开时,它们不会运行。我想要做的是如果有一个应该显示的搜索值,显示它。如果不是,它遵循上面模糊/聚焦函数中的逻辑。

4

2 回答 2

1

我尝试将您的代码放在此处的 jsFiddle 中,并在开发人员工具控制台中出现以下错误:

未捕获的 ReferenceError:未定义 handleSearchFocus

未捕获的 ReferenceError:未定义 handleSearchBlur

请注意,我将 jsFiddle 设置为运行脚本onLoad,这就是我假设您正在使用代码执行的操作。

通常,您会运行代码onLoad,因为您需要完成所有元素的加载才能操作和抓取页面上的元素。在你的情况下,你需要相反的事情发生。您的元素是使用与您的函数相关联的事件onfocus创建的。onblur但是,这些功能尚不存在,因此无法触发。请注意,如果您将 jsFiddle 更改onLoadno wrap (body).

换句话说,元素试图在功能可用之前找到它们

您需要将函数放在<script>正文中的标签中(在元素之后),或者将其附加到$(document).ready代码中的事件中,如下所示:

$('#txtSearch').focus(function () {
    // code here
});
$('#txtSearch').blur(handleSearchBlur);
于 2012-07-26T22:30:45.083 回答
0

MrOBrian 在问题评论中发现了导致此问题的错误。

于 2012-07-26T22:57:19.680 回答