jQuery事件委托

我需要一些帮助与callback。 出于某种原因,他们工作得不好。
我正在用jQuery做一个游戏。 对于游戏中的所有button,我都有一个<div id='button'></div> “。 游戏将有两个button,使行动,并在其上的问题。 问题由<h3 id='text'></h3> 。 我想知道的是,由于某种原因,我不能将callback函数设置为button的ID。 在例如,我会有是或否,有自己的ID设置通过jQuery像这样:

$('#button').html('<button id='yes'>Yes</button><button id='no'></button>');
但由于某种原因,我可以设置这个:

 $('yes').click(function(){ //function I would want }); 

当然,这不是我的代码,这只是一个例子。 这是真实的代码:

 $(document).ready(function(){ $('#main,#batman,#car,#cop,#hobo,#knife,#gangfight,#ganggun,#gangknife,#blood,#hr').hide(-100); var hr=$('#hr'); var main=$('#main'); var batman=$('#batman'); var car=$('#car'); var hobo=$('#hobo'); var cop=$('#cop'); var knife=$('#knife'); var gangfight=$('#gangfight'); var ganggun=$('#ganggun'); var gangknife=$('#gangknife'); var blood=$('#blood'); var text=$('#text'); var button=$('#button'); $('#start').html('Are you ready to play?'); $('#button').html('<button id="yes">Yes</button><button id="no">No</button>'); $('#yes').click(function(){ $('#yes,#no').hide(function(){ $('#start').hide(); main.fadeIn(-100); hr.fadeIn(-100,function(){ text.delay(1000).html("You were just wandering around in the streets of new york, when suddenly.. You see batman!! You've never really liked him, what do you do?") button.html('<button id="fight">Fight</button><button id="leave">Leave</button>',function(){ batman.fadeIn(1000); $('fight').click(function(){ }); $('leave').click(function(){ text.fadeOut(function(){ text.text('Good call. As you leave, you encounter a hobo. What do you do?'); }); }); }); }); }); }); $('#no').click(function(){ $('#yes,#no').hide(); $('#start').text('Oh, okay then. Come back later!'); }); }); 

我只是想知道..我怎样才能设置callback函数的'打架'和'离开'。
如果你想知道为什么一开始就有这些变数,那只是图像和字符。

您不能在不存在的元素上设置click处理程序。 你应该做的就是使用.on将一个元素绑定到树上。 就像是:

 $("#someparentelement").on("click", "#yes", function() { // your code }); 

你正在使用哪个版本的jQuery? 您应该在这种情况下使用jQuery.on(),因为您的点击处理程序代码可能在DOM中实际可用的button之前执行。

 $("#button").on("click", "#yes", function (event) { // Your yes-button logic comes here. }); 

有关更多细节和可能性,请阅读jQuery文档中的.on(events [, selector ] [, data ], handler(eventObject))方法:

如果省略select符或者为null,那么事件处理程序被称为直接或直接绑定。 每当事件发生在选定的元素上时,处理程序就会被调用,无论它是直接发生在元素还是来自后代(内部)元素的气泡。

当提供select器时,事件处理程序被称为委托。 当事件直接发生在绑定元素上时,处理程序不会被调用,但是只有匹配select器的后代(内部元素)才会调用该处理程序。 jQuery将事件从事件目标拖动到处理程序所在的元素(即,最内层到最外层的元素),并沿着匹配select器的path上的任何元素运行处理程序。

在这种情况下,您想要delegate事件,因为当绑定事件时,您的元素在DOM中尚不可用。

不要使用click() ,使用on('click')并将其附加到文档中。

以这种方式创build一个处理程序,将确保任何新的元素将能够触发事件。

$('战斗')select战斗标记,而不是与战斗ID标记。 尝试使用$('#fight')来代替。