在jquery生成的元素

时间:2017-03-31 09:40:00

标签: javascript jquery

我的代码是这样的:

$('.flag-icon-dz').click(function() {
  var lang = 'Arab';
  var $frame = $('.goog-te-menu-frame:first');
  if (!$frame.size()) {
    console.log("Error: Could not find Google translate frame.");
    return false;
  }
  $frame.contents().find('.goog-te-menu2-item span.text:contains(' + lang + ')').get(0).click();
  $("li.ql-item.linkid188546").after("<li class='ql-item linkid18854777 closegoogle'><a href='#' class='btn-primary' target='_self'><i class='icon closegoogle ls-lang-frr' aria-hidden='true'></i></a></li>").fadeIn(500);
  $('li.ql-item.linkid188546').fadeOut(500);
  return false;
});

$('.closegoogle').click(function() {
  $('.skiptranslate').contents().find('.goog-close-link > img').click();
  $('li.ql-item.linkid18854777').fadeOut('fast').remove();
  $('li.ql-item.linkid188546').fadeIn(500);
});

第一个功能效果很好,但第二个功能并不好。我意识到,如果我在第一个之后的控制台中复制/粘贴第二个功能,它也可以。

我尝试了一些解决方案(callback / setTimeout / jquery deferred / jquery。当方法......)我没有尝试承诺,但我认为我不得不在我的背景下。也许我没有写好这些解决方案。

我终于尝试将我的事件(点击)直接放到.before()创建我的新元素,如下所示:

$('.flag-icon-dz').click(function() {
  var lang = 'Arab';
  var $frame = $('.goog-te-menu-frame:first');
  if (!$frame.size()) {
    console.log("Error: Could not find Google translate frame.");
    return false;
  }
  $frame.contents().find('.goog-te-menu2-item span.text:contains(' + lang + ')').get(0).click();
  $("li.ql-item.linkid188546").after("<li class='ql-item linkid18854777 closegoogle'><a href='#' class='btn-primary' target='_self'><i class='icon closegoogle ls-lang-frr' aria-hidden='true'></i></a></li>").fadeIn(500).click(function() {
    $('.skiptranslate').contents().find('.goog-close-link > img').click();
    $('li.ql-item.linkid18854777').fadeOut('fast').remove();
    $('li.ql-item.linkid188546').fadeIn(500);
  });
  $('li.ql-item.linkid188546').fadeOut(500);
  return false;
});

但它也不起作用。

感谢您的帮助。

编辑:

我终于为我的第二次点击事件找到了一种解决方案(这不是最佳解决方案,但我的工作原理):

window.setInterval(function(){$('.closegoogle').on("click",function(){
$('.skiptranslate').contents().find('.goog-close-link > img').click();
  $('li.ql-item.linkid18854777').fadeOut('fast').remove();
  $('li.ql-item.linkid188546').fadeIn(500);
}); }, 1000);

感谢。

1 个答案:

答案 0 :(得分:2)

在尝试绑定之前,您需要使用delegated bind作为元素不存在:

$('#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);
}); 

请注意,#parent-element-of-closegoogle必须是执行绑定时已存在的元素 - 如果您没有其他元素可以绑定到

,则可以是$(document)