我需要一些关于回调的帮助。出于某种原因,它们的效果并不好
我正在用jQuery制作游戏。我有一个<div id='button'></div>
用于游戏中的所有按钮。游戏将有两个按钮来进行操作,并在其上面提出问题。问题由<h3 id='text'></h3>
控制。我想知道的是,由于某种原因,我无法将回调函数设置为按钮的ID。在例子中,
我有或者没有,它们通过jQuery设置了自己的id:
$('#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!');
});
});
我只是想知道..如何将回调功能设置为'战斗'和'离开' 如果你想知道为什么一开始就有所有这些变量,那些只是图像和字符。
答案 0 :(得分:3)
您不能在不存在的元素上设置click
处理程序。你应该做的是使用.on
绑定树上的元素。类似的东西:
$("#someparentelement").on("click", "#yes", function() {
// your code
});
答案 1 :(得分:1)
您使用的是哪个版本的jQuery?你可能应该在这种情况下使用jQuery.on(),因为你的点击处理程序代码可能会在按钮在DOM中实际可用之前执行。
$("#button").on("click", "#yes", function (event) {
// Your yes-button logic comes here.
});
有关详细信息和可能性,请参阅jQuery documentation中的.on(events [, selector ] [, data ], handler(eventObject))
方法:
如果省略selector或为null,则事件处理程序称为直接或直接绑定。每次在所选元素上发生事件时都会调用该处理程序,无论它是直接发生在元素上还是来自后代(内部)元素的气泡。
提供选择器时,事件处理程序称为委托。当事件直接发生在绑定元素上时,不会调用处理程序,但仅适用于与选择器匹配的后代(内部元素)。 jQuery将事件从事件目标起泡到附加处理程序的元素(即最里面到最外层的元素),并为该路径上与选择器匹配的任何元素运行处理程序。
在这种情况下,您希望delegate
该事件,因为当您绑定事件时,您的元素尚未在DOM中可用。
答案 2 :(得分:0)
请勿使用click()
,使用on('click')
并将其附加到文档中。
以这种方式创建处理程序,将确保任何新元素都能够触发事件。
答案 3 :(得分:0)
$('fight')选择战斗标记,而不是战斗ID的标记。尝试使用$('#fight')代替。