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
        }

    }

フォーカスとブラーを処理するこれら 2 つの関数は機能しなくなりました。入力ボックスをクリックしたり、クリックしたりしても実行されません。私がやろうとしているのは、表示する必要がある検索値がある場合は、それを表示することです。そうでない場合は、上記のぼかし/フォーカス関数のロジックに従います。

4

2 に答える 2

1

コードを jsFiddle hereに入れようとしたところ、開発者ツール コンソールに次のエラーが表示されました。

Uncaught ReferenceError: handleSearchFocus が定義されていません

Uncaught ReferenceError: handleSearchBlur が定義されていません

スクリプトを実行するように jsFiddle を設定したことに注意してonLoadください。これは、コードで実行していると想定しているものです。

onLoadページ上の要素を操作して取得するには、すべての要素の読み込みを完了する必要があるため、通常はコードを実行します。あなたの状況では、反対のことが起こる必要があります。要素は、関数に関連付けられたonfocusおよびイベントで作成されます。onblurただし、これらの関数はまだ存在しないため、起動できません。jsFiddleonLoadを に変更すると、関数が機能することに注意してくださいno 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 に答える