0

$('#searchbox')。liveが検索入力の入力を妨げる理由がわかりません。イベントをログに記録できますが、何も表示されません。しかし、検索ボックスの行をコメントアウトすると、突然検索ボックスにテキストが表示されるようになります。さらに、虫眼鏡クリックによる検索機能も動作します!非常に奇妙な。

誰かがこのような問題を抱えていましたか?

このように構成したのは、この関数を他のアプリケーションで使用したいからです。

function initModuleSearch(selector){
    $('#clear_x').live('click', {name:'clear', id:selector}, performSearch);//clears search
    $('#magnify').live('click', {name:'find', id:selector}, performSearch);//submits search
    $('#searchbox').live('keyup', {name:'enter', id:selector}, performSearch);//submits search
    return false;
}

function performSearch(evt){
    var eventType = evt.type;        
    var eventName = evt.data.name;
    var selector = evt.data.id;
    var searchInput = $('#searchbox');

    console.log('Hello:' + eventName)

    //do some search and filter stuff below here

   evt.preventDefault();//disallow browser to perform default action
   return false;
}



initModuleSearch(".module");//init searchbox function
4

2 に答える 2

0

keyup-eventをキャッチし、performSearch-functionを呼び出してイベントを渡します。次に、その関数内で.preventDefault()onを呼び出します。これにより、キーストロークが入力に登録されなくなると思います。

あなたはおそらく次のようなことを試すことができます:

if (eventType !== "keyup")
   evt.preventDefault();

そうすれば、他の要素へのクリックは防止されますが、検索入力を入力することはできます。

明確化:

追加する3つの最初のイベントリスナー:

$('#clear_x').live('click', {name:'clear', id:selector}, performSearch);//clears search
$('#magnify').live('click', {name:'find', id:selector}, performSearch);//submits search
$('#searchbox').live('keyup', {name:'enter', id:selector}, performSearch);//submits search

すべて同じ関数を呼び出しますperformSearch。その関数内で、キャッチしたばかりのイベントevt(検索ボックスの場合はkeyup-event)を取得し、その上で.preventDefault()メソッドを呼び出しますevt.preventDefault()。これにより、ブラウザーにデフォルトを破棄するように指示します。このkeyup-eventの動作。通常は、ストロークしたばかりのキーの文字を入力フィールドに追加します。あなたが言うときevt.preventDefault()、あなたはブラウザに「それをしないでください、代わりに他のカスタムなことをさせてください...」と言うので、ブラウザはそのキーストロークを入力フィールドに追加しません。

あなたは私と一緒ですか?

于 2012-02-24T22:00:19.600 に答える
0

evt.preventDefault();またはreturn false、テキストボックスに何も入力できなくなります。

不要だと思われる場合は、メソッドから削除してください。

于 2012-02-24T22:00:35.833 に答える