0

これは私をずっと悩ませてきました。関数内にクリックイベントを作成しようとしていますが、機能していないようです。基本的なレイアウトは次のとおりです。

function init() {

$('#a2').click(function() {
//does some stuff. Works fine.

    $('#addDest').click(function() {
    //does more stuff. Works fine…
        if ($("#input2").is(':visible'))     
        {alert("test");};
     });
});
};

このページは常に#input2が表示されていると想定しています。オンとオフが切り替わりますが。Firebugをチェックインすると、真実を知ることができます。ただし、#input2をクリックすると、常にアラートがポップアップ表示されます。問題のある部分を関数の外に投げることができます。ただし、ドキュメントの読み込み時に宣言されていない変数がいくつかあるため、問題がさらに発生します。私はこれを長い道のりで行ったと思っています。おそらくイベントハンドラーまたはクリックイベントがより多くの解決策になるでしょう。しかし、私はまだそのレベルの理解には至っていません。ページが読み込まれるときのように、その問題領域を読み取っていることを私は知っています。この問題に対するより簡単な解決策はありますか?私はもっ​​と学ぶ必要があることを知っています...どうもありがとう!

4

3 に答える 3

1

このマークアップで:

<button id="a2">A2</button>
<button id="addDest">Add</button>
<input type="text" id='input2'>

そしてこのCSS:

#addDest,#input2{display:none;}

これは機能します:

$('#a2').click(function() {
    $('#addDest').show();
});
$('#addDest').click(function() {
    if ($("#input2").is(':visible')) {
        alert("test");
    };
    $('#input2').show();
});

説明:

  • 非表示であっても、すべての要素が存在することを前提としています。
  • 非表示になっているため、addDestのクリックイベントをa2のクリックイベントハンドラーの外に追加できます。非表示にして開始するとクリックされないためです。
  • 私の例では、input2は最初は非表示になっているため、2回目のクリックでのみアラートが表示されます(addDestの最初のクリックイベントハンドラーに表示されます)。

変更した場合

  $('#input2').show();

に:

$('#input2').toggle();

入力の可視性に基づいて変化することがわかります。

実例: http: //jsfiddle.net/25Vfy/

于 2012-07-18T22:11:24.360 に答える
0

問題はclick、#addDestのイベントが何度もバインドされていることである可能性があります。$('#addDest').unbind("click")バインドする前に実行してみてください

于 2012-07-18T21:14:07.637 に答える
0

あなたはこのようなことを試みることができます

$('#a2').click(function() {
    $(this).attr('data-clicked','true'); 
});


$('#addDest').live('click', function() {

    if ($("#input2").is(':visible') && $('#a2').attr('data-clicked') == 'true')     
    {alert("test");};
 });

初めてクリックしたときにのみアラートを表示する場合

$('#a2').click(function() {
    $(this).attr('data-clicked','true'); 
});

$('#addDest').live('click', function() {

    if ($("#input2").is(':visible') && $('#a2').attr('data-clicked') == 'true'){

           if($(this).attr('data-clicked') != 'true'){
              $(this).attr('data-clicked','true'); 
              alert("test");
           };
     }
});
于 2012-07-18T21:34:31.333 に答える