Jquery &引用;“时间更新”;事件函数在重新绑定后触发两次
我的Jquery &引用;“时间更新”;事件函数在重新绑定后触发两次,jquery,html5-audio,jquery-events,Jquery,Html5 Audio,Jquery Events,我的”有问题; $('.choices').html(''); 选择=[ $(''), $('') ]; $。随机化(选择); $.each(选项、函数(索引、值){ $('.choices')。追加(值); }); $('#audio-try_')。在('timeupdate',function()上{ 如果(重试\u音频\u元素.currentTime>=5){ $(this.off('timeupdate'); log('突出显示正确的图像'); $('.correct').animate
”有问题;
$('.choices').html('');
选择=[
$(''),
$('')
];
$。随机化(选择);
$.each(选项、函数(索引、值){
$('.choices')。追加(值);
});
$('#audio-try_')。在('timeupdate',function()上{
如果(重试\u音频\u元素.currentTime>=5){
$(this.off('timeupdate');
log('突出显示正确的图像');
$('.correct').animate({opacity:0.25},200,function(){
动画({opacity:1},200,function()){
$('.correct').animate({opacity:0.25},200,function(){
设置动画({opacity:1},200);
});
});
});
}
});
$('.goal,.choices').fadeIn();
}
函数get\u object\u pair(){
object_to_find=other_object=get_random_index();
while(其他对象==要查找的对象){
其他对象=获取随机索引();
}
将object_返回到_find+'|'+其他_对象;
}
函数get_random_index(){
返回Math.floor(Math.random()*总图像);
}
功能问题(已回答){
如果(正确答案==4){
警惕('您已正确回答了四个问题');
}
否则{
$('.goal,.choices').fadeOut(函数(){
$(“#音频-再试一次”).off('timeupdate');
setTimeout(生成_对象,200);
});
}
}
$(文档).ready(函数(){
正确答案=0;
图像=[
“数据:图片/png;base64,IVBorW0Kggoaaaansuhueugaaabaaabaaaqcayaaaaf8/9Haaaaculeqvr42qxt0qnaiaxfuufjnjnop+gwWUfIAOkTUpBAC/V9Ni9kukdv1iqhqegm1muaz3fpwq6omqlzxmpaygrdh+5QPZAh/ippwefpwg4amvdiunj2apil0f+hDp30heJP4q84+Jfs43txnFT7FsW/caaavorasuk5cyii=”,
“数据:图片/png;base64,IVBorW0KggoaaaAnsuhueugaaabaaaaqcayaaaaf8/9Haaaaculeqvr42qwt0qnaaxehsxtzdqdosnkyadpcekijzw2Kpeh3i8tiwl7ktbawy8stznt1Vbftqqtzqmyorqcros2zlvlqxyk9u/amhc3znphznphjgjgwijbdyetgic2Kn5ecj6u+c9Ef+cTtijFT/bugvoaaaaaavorasuk5cyii=”,
“数据:图片/png;base64,IVBorW0KggoaaaAnsuhueugaaababaaaaqcayaaaaf8/9Haaaaculeqvr42qwt0qnaiaxehskto2doskHceb0Hmowuap9J7EH3J5YEXKrmlu0ICDTPX3NW3W4G4ELDBVDGYSCWZCDH3CRC0BRXECA9ABX6MANBWWWOFGTNGUKUIDOSKB+gtxE+RVFqHWJHW8mez0FTFtFt731Loaauvork5YII=”,
“数据:图片/png;base64,IVBorW0KgoaaAnsuhueugaabaaqcayaaaaf8/9Haaaaaa0LeqVR42QXT0QNaiawawe0izine6Xtoewsequex9Hfkkbaknvb+JB1EJI9XBwgkgk116xl9VAIwe+YKPP8PjlPW27iek8YE99HnapWbWbWwbumWkicGa+GW6EuKn5HxH5HxH5Ov0AaAsuvor5cyii=”
];
图像总数=图像长度;
total_排列=阶乘(total_图像)/阶乘(total_图像-2);
重试音频元素=$(“#音频-重试”)[0];
$(文档).on('click','correct',函数(){
if(!$(this).hasClass('disabled')){
$('.correct、.error').addClass('disabled');
正确答案++;
问题(已回答);
}
}).on('单击','不正确',函数(){
if(!$(this).hasClass('disabled')){
$('.correct、.error').addClass('disabled');
请重试\u音频\u元素。播放();
}
});
$('#audio-try_')。在('end',function()上{
问题(已回答);
});
使用的_对=[];
生成_对象();
});
演示:
有什么想法吗?看来问题出在这一块:
$('.goal, .choices').fadeOut(function() {
$('#audio-try_again').off('timeupdate');
setTimeout(generate_objects, 200);
});
选择器$('.goal.choices')
将返回一个包含两个元素的jQuery集合,这意味着回调函数将被调用两次(每个匹配的元素调用一次)
针对您的特定应用,一种快速而肮脏的解决方法是:
$('.goal, .choices').fadeOut(function() {
if ( $(this).is('.goal') ) return;
$('#audio-try_again').off('timeupdate');
setTimeout(generate_objects, 200);
});
实际上,它只会执行该回调中的内容一次。您能否提供更多关于两次重现该事件的确切步骤的信息?从演示中看不出您希望它如何工作。@KevinEnnis对此表示抱歉。进入演示时,打开浏览器的控制台(同样,我感兴趣的浏览器只有Firefox、Google Chrome和Internet Explorer 10),然后单击右侧与左侧颜色不匹配的颜色。这将导致音频播放。音频播放5秒钟后,控制台中将出现一条消息。这就是我想要的。现在再做一次。这一次,控制台中会出现两条消息。啊,当然!这就解决了问题。我应该亲眼看到的。我知道选择器就是这样工作的;我只是错过了。谢谢你帮我解决这个问题!
$.randomize = function(arr) {
for (var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x);
return arr;
};
function factorial(num) {
var rval = 1;
for (var i = 2; i <= num; i++) {
rval = rval * i;
}
return rval;
}
function generate_objects() {
this_pair = get_object_pair();
if (used_pairs.length < total_permutations) {
while ($.inArray(this_pair, used_pairs) > -1) {
this_pair = get_object_pair();
}
}
else {
used_pairs = [];
}
used_pairs.push(this_pair);
objects = this_pair.split('|');
object_to_find = objects[0];
other_object = objects[1];
$('.goal').html('<a href="javascript:void(0);"><img src="' + images[object_to_find] + '" alt=""></a>');
$('.choices').html('');
choices = [
$('<a href="javascript:void(0);" class="correct"><img src="' + images[object_to_find] + '" alt=""></a>'),
$('<a href="javascript:void(0);" class="incorrect"><img src="' + images[other_object] + '" alt=""></a>')
];
$.randomize(choices);
$.each(choices, function(index, value) {
$('.choices').append(value);
});
$('#audio-try_again').on('timeupdate', function() {
if (try_again_audio_element.currentTime >= 5) {
$(this).off('timeupdate');
console.log('Highlight the correct image.');
$('.correct').animate({opacity: 0.25}, 200, function() {
$(this).animate({opacity: 1}, 200, function() {
$('.correct').animate({opacity: 0.25}, 200, function() {
$(this).animate({opacity: 1}, 200);
});
});
});
}
});
$('.goal, .choices').fadeIn();
}
function get_object_pair() {
object_to_find = other_object = get_random_index();
while (other_object == object_to_find) {
other_object = get_random_index();
}
return object_to_find + '|' + other_object;
}
function get_random_index() {
return Math.floor(Math.random() * total_images);
}
function question_answered() {
if (correct_answers == 4) {
alert('You have correctly answered four questions.');
}
else {
$('.goal, .choices').fadeOut(function() {
$('#audio-try_again').off('timeupdate');
setTimeout(generate_objects, 200);
});
}
}
$(document).ready(function() {
correct_answers = 0;
images = [
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcUlEQVR42qXT0QnAIAxFUUfJNJlOp+gwWUfIAOkTUpBAC/V9nI9KuKDV1iIqhQEGM1muaZ3fPwQ6OMQLzxmpAYGrDH+5QPZAh/ipPwEFPwg4aMvDiUNjBYwI2ApMIjDpAL0F+hDp30heJP4q84+Jfs43txnFT7FsW/cAAAAASUVORK5CYII=',
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcUlEQVR42qWT0QnAIAxEHSXTZDqdosNknYADpCekIJZW2kPeh3I8TIwl7ktBAwY8sTzTNT1vBFTQQTzQMyOrQMCRoS2ZlVlQQXykXgJ9u/amHC3ZnPhJGwIjBDYETgicFtAl0E2kn5EcJH6U+c9Ef+cTtijFT/BuGVoAAAAASUVORK5CYII=',
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcUlEQVR42qWT0QnAIAxEHSXTOF2dosNkHcEB0hMOwUAp9j7eh3J5YExKRMlU0ICDTpx3NWW3g4ELDBAvDGYsCwzcDH3CrC0BrXECa9abx6mANbWwOfGTNgUuCHwKuiDoskB+gtxE+RvFQdJHWV8meZ0ftTfFT731dloAAAAASUVORK5CYII=',
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAa0lEQVR42qXT0QnAIAwE0IziNE6XTOEwWSeQAex9hFKKbaknvB+JB1Eji9XBwCGK116Xl9VAIWE+yKppq8PjLPw27iEK8ye99pwbAVlnxWBuMhAnAhwkiICgA+gW6Eukn5H8SPxX5oeJHucDimXHMWd8ov0AAAAASUVORK5CYII='
];
total_images = images.length;
total_permutations = factorial(total_images) / factorial(total_images - 2);
try_again_audio_element = $('#audio-try_again')[0];
$(document).on('click', '.correct', function() {
if (!$(this).hasClass('disabled')) {
$('.correct, .incorrect').addClass('disabled');
correct_answers++;
question_answered();
}
}).on('click', '.incorrect', function() {
if (!$(this).hasClass('disabled')) {
$('.correct, .incorrect').addClass('disabled');
try_again_audio_element.play();
}
});
$('#audio-try_again').on('ended', function() {
question_answered();
});
used_pairs = [];
generate_objects();
});
$('.goal, .choices').fadeOut(function() {
$('#audio-try_again').off('timeupdate');
setTimeout(generate_objects, 200);
});
$('.goal, .choices').fadeOut(function() {
if ( $(this).is('.goal') ) return;
$('#audio-try_again').off('timeupdate');
setTimeout(generate_objects, 200);
});