1
<button id="first">Click me first</button>

$('#first').click(function(){
  $('body').append('<button id="second">Now click me</button>');
});

$('#second').click(function(){
  $(this).hide();
});

jsFiddle

#firstクリックする#secondと追加されます。クリックする#secondと隠れて欲しいです。

なぜこれが機能しないのですか?

4

6 に答える 6

4

このイベントハンドラーを開始すると

 $('#second').click(function(){
  $(this).hide();
});

'#second'要素はまだ存在しません。後で要素を追加しますが、その要素はイベントハンドラーで開始されません。

あなたはこれを試すことができます

$('#first').click(function(){
  $('body').append('<button id="second">Now click me</button>');
  // event handler will attached for already exist '#second' element
  // attach event if only #second doesn't have event yet
  if(!($('#second').data('events') != null && $('#second').data('events').click != undefined && $('#second').data('events').click.length == 1))
  $('#second').click(function(){
    $(this).hide();
  });
});
于 2013-01-16T04:42:59.450 に答える
2

jQueryon関数を使用します。

$(document).on('click', '#second', function(){
  $(this).hide();
});
于 2013-01-16T04:45:23.623 に答える
1

$('#second')実行時に何も一致しないため、機能していません。

DOMに追加する前に、要素にクリックハンドラーを割り当ててみてください。

$('#first').click(function(){
  var $button = $('<button id="second">Now click me</button>');
  $button.click(function() {
    // handler
  });
  $('body').append($button);
});

on要素が存在する前にイベントハンドラーを「アタッチ」する必要がある場合は、を使用してイベントを委任することもできます。

于 2013-01-16T04:43:56.947 に答える
1

使用するon()

$(document).on('click', '#second', function(){
  $(this).hide();
})

参照

http://api.jquery.com/on/

于 2013-01-16T04:53:08.473 に答える
0

試す

$('#second').on("click",function(){
 $(this).hide();
});
于 2013-01-16T04:47:01.757 に答える
0

コードが機能しない理由を明確にするには:#secondのイベント処理の定義中に、divが存在しません。DOM要素$( "#second")がページに存在することを確認した後、イベント処理を定義する必要があります。

于 2013-01-16T04:51:57.820 に答える