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).goog close链接
    类仅在执行此行时加载:
    $frame.contents().find('.goog-te-menu2-item span.text:包含('+lang+'))。get(0)。单击()