0

ユーザーがログインしたときにサインインボタンがサインアウトボタンに変更されるプログラムを書いています。コードは次のとおりです。

$("#signin").button().click(function(){
  $("#dialog-user").dialog("open");
});

$.post('php/in.php',function(data){
    $("#signin").attr('id','out');
});

$("#out").button().click(function(){
   alert("clicked out");
});

途中のコードは省略していますが、基本的にユーザーがサインインに成功すると、#signin ボタンの id が #out に変更されます。ただし、ID #out の新しいボタンをクリックすると、指定したアラート (「クリックされました」) が表示されません。ボタン ID がまだ #signin であるかのように #dialog-user を表示します。

これを修正するのを手伝ってください。

4

3 に答える 3

3

イベントの委任を使用する必要があります。クリックイベントをバインドしている場合#outつまりページの読み込み時に存在しません

$(document).on('click',"#out",function(){
   alert("clicked out");
});
于 2013-06-19T20:49:08.357 に答える
1

そのような場合、イベントを静的な先祖に委譲する必要があります。イベントは**要素にバインドされており、要素の属性にはバインドされていません。

このアプローチを試してみてください..

$(document).on('click',"#out",function(){
   alert("clicked out");
});

または

$(signin static ancestor).on('click',function(e) {
      if(e.target.id === 'signin') {
          $("#dialog-user").dialog("open");  
      }
      else if(e.target.id === 'out') {
           alert("clicked out");
      }
});
于 2013-06-19T20:49:23.473 に答える
0
$("#signin").button().click(function(){
  $("#dialog-user").dialog("open");
});

$.post('php/in.php',function(data){
    $("#signin").attr('id','out');
    $("#out").button().click(function(){
       alert("clicked out");
    });
});

あなたの例では、イベントが関連付けられた後に id が変更され、イベントを関連付けるものは何もありません。post 関数内に out ボタン クリックを配置することで、サーバーからデータが返されたときに ID を変更し、イベントを割り当てることが保証されます。

于 2013-06-19T20:50:29.720 に答える