0

これは本当に簡単な答えがあると確信しています:

フォームにフォーカスすると、フォームの下に追加のボタンが表示され、選択肢をフィルタリングできるようにする検索フォームがあります。検索フォームでそれらのオプションが消えるようにしようとしています。現在、これらのオプションの1つをクリックすると、オプションメニューが閉じます。そのため、これらのオプションがクリックされたかどうかをテストする方法を探しています。これが私がこれまでに思いついたコードです:

    $("#search").blur(function(){
       $("#selector").click(function(){
           return false;
       });
       $("#selector").toggle();
    });

また、次のようなことを行おうとすると、失敗した結果が得られました。

    var is_clicked = true;
    $("#selector").click(function(){
        is_clicked = false;
    });
    console.log ( is_clicked ); // always returns true
4

3 に答える 3

2

これを参照してください:http://jsfiddle.net/gP8Jg/1/

 $("#search").blur(function(){
   $("#selector").mousedown(function(){
       return false;
   });
   $("#selector").toggle();
});
 $("#search").focus(function(){
   $("#selector").fadeIn();
});

mousedown()代わりに使用してみてくださいclick()

于 2013-01-10T07:10:16.970 に答える
0

console.logは同期的に実行されるため、これは常にtrueを返します。

var is_clicked = true;
$("#selector").click(function(){
    is_clicked = false;
    // console.log( is_clicked ); // will yeild false
});
console.log ( is_clicked ); // always returns true

私はあなたがここで何をしたのかよくわかりません:

$("#search").blur(function(){
   $("#selector").click(function(){
       return false; // Cancels the click
   });
   $("#selector").toggle(); // Slides vissible/hidden $('selector')
   // There is no code here that checks state of buttons or any other element
   // on the page.
});

クリック時に要素を切り替えるには、独自のクリックハンドラーを使用します。

$('#selector').click(function (event) {
    $('#selector').toggle();
});
于 2013-01-10T07:09:32.450 に答える
0

オプションをクリックした後にオプションメニューを閉じる必要がある場合は、遅延して切り替えます。jssetTimeout()を使用して、オプション要素自体のクリックをキャッチします

于 2013-01-10T07:12:39.047 に答える