Javascript 在jquery生成的元素上绑定事件
我的代码如下:Javascript 在jquery生成的元素上绑定事件,javascript,jquery,Javascript,Jquery,我的代码如下: $('.flag图标dz')。单击(函数(){ var lang=‘阿拉伯’; var$frame=$('.googte菜单框架:第一个'); 如果(!$frame.size()){ log(“错误:找不到谷歌翻译框架。”); 返回false; } $frame.contents().find('.goog-te-menu2-item span.text:contains('+lang+'))。获取(0)。单击(); $(“li.ql-item.linkid188546”)。之后
$('.flag图标dz')。单击(函数(){
var lang=‘阿拉伯’;
var$frame=$('.googte菜单框架:第一个');
如果(!$frame.size()){
log(“错误:找不到谷歌翻译框架。”);
返回false;
}
$frame.contents().find('.goog-te-menu2-item span.text:contains('+lang+'))。获取(0)。单击();
$(“li.ql-item.linkid188546”)。之后(“”)。fadeIn(500);
$('li.ql item.linkid188546').fadeOut(500);
返回false;
});
$('.closegoogle')。单击(函数(){
$('.skiptranslate').contents().find('.goog close link>img')。单击();
$('li.ql item.linkid18854777').fadeOut('fast').remove();
$('li.ql item.linkid188546').fadeIn(500);
});
第一个函数很好用,但第二个不行。我意识到如果我在控制台中复制/粘贴第一个函数之后的第二个函数,它也会起作用
我尝试了一些解决方案(callback/setTimeout/jquery deferred/jquery.when方法…),我没有尝试promise,但我认为我不必在我的上下文中这样做。也许我写的这些解决方案不够好
最后,我尝试将我的事件(单击)直接放入.before()
,它创建了如下新元素:
$('.flag图标dz')。单击(函数(){
var lang=‘阿拉伯’;
var$frame=$('.googte菜单框架:第一个');
如果(!$frame.size()){
log(“错误:找不到谷歌翻译框架。”);
返回false;
}
$frame.contents().find('.goog-te-menu2-item span.text:contains('+lang+'))。获取(0)。单击();
$(“li.ql-item.linkid188546”)。在(“”)之后。fadeIn(500)。单击(函数(){
$('.skiptranslate').contents().find('.goog close link>img')。单击();
$('li.ql item.linkid18854777').fadeOut('fast').remove();
$('li.ql item.linkid188546').fadeIn(500);
});
$('li.ql item.linkid188546').fadeOut(500);
返回false;
});
但它也不起作用
谢谢你的帮助
编辑:
我终于为我的第二次点击事件找到了一种解决方案(这不是最好的解决方案,但我可以做到):
window.setInterval(function(){$('.closegoogle')。在(“单击”,function(){
$('.skiptranslate').contents().find('.goog close link>img')。单击();
$('li.ql item.linkid18854777').fadeOut('fast').remove();
$('li.ql item.linkid188546').fadeIn(500);
}); }, 1000);
谢谢。在尝试绑定之前,您需要使用,因为元素不存在:
$('#parent-element-of-closegoogle').on('click', '.closegoogle', function() {
$('.skiptranslate').contents().find('.goog-close-link > img').click();
$('li.ql-item.linkid18854777').fadeOut('fast').remove();
$('li.ql-item.linkid188546').fadeIn(500);
});
请注意,closegoogle的
#父元素
需要是在您进行绑定时已经存在的元素-如果您没有其他元素可绑定,则可以是$(文档)
,我要做的是在单击时翻译我的页面,并在单击时删除翻译,就像toggleClass方法可以做的那样。Thxy您正在绑定click函数后创建.closegoogle元素。在执行脚本时,它将使用closegoogle类将关闭函数绑定到每个现有元素。但既然你是在事后创建的,它就不起作用了。您应该在创建元素后尝试添加click侦听器。是否可以尝试使用此$('.closegoogle')。on(“click”,function(){});我试过了,但没用。我只是想告诉你,你的“解决方案”不是很好,因为你每秒都在绑定一个新的点击事件。我试过你的解决方案,但没用。closegoogle的父元素#在iframe(googletranslate)中,我认为这是一个可能的问题。我也尝试使用$(document)
,但效果不太好。控制台中没有任何错误。如果它是iframe,则需要绑定到$frame.contents().find('body')。在
上,我将其更改为$frame.contents().find('body')。在
上,但结果相同。当我在控制台中将其添加到后面时,此代码会起作用:$('.skiptranslate').contents().find('.goog close link>img')。click()$('li.ql item.linkid18854777').fadeOut('fast').remove()$('li.ql item.linkid188546').fadeIn(500)但是如果我加载了所有的代码,关闭google函数就不存在了。当你进行绑定时,框架是存在的还是加载了ajax?如果是后者,那么您使用什么插件来显示iframe?它应该有一个onload函数,您可以在其中进行绑定,因为框架还不存在。.goog close链接
类仅在执行此行时加载:$frame.contents().find('.goog-te-menu2-item span.text:包含('+lang+'))。get(0)。单击()代码>