为什么事件不会在jquery中发生?

时间:2017-04-09 12:08:24

标签: javascript jquery

你能告诉我为什么当我在selectorobject时,点击事件没有被触发; 这是我的代码 https://jsbin.com/seregezahe/1/edit?html,js,output

(function(){
  $(function(){
    var config ={
      btn:$('#btn'),
      hello:$('.hello'),
       bodyClickEvent: $("body"),
       overlayClick: $('.overlay'),
      closeBtnSelector: '#closeBtn',
    };
  config.btn.click(function(){
    $('#container').append($('#overlay').html())
    $('.popupdata').html('<div class="hello">xxxx</div><a href="javascript:void(0)"  id="closeBtn" >X Close</a></div>');


  })
  config.bodyClickEvent.on("click", config.closeBtnSelector, function () {

    //why it is not working
    config.overlayClick.fadeOut(500);
               config.overlayClick.remove();
    // below code is working fine
               //$('.overlay').fadeOut(500);
               //$('.overlay').remove();
            });

})
})()

为什么这两行不起作用

 config.overlayClick.fadeOut(500);
               config.overlayClick.remove();

当我运行我的代码时,当我点击按钮button并使用关闭按钮文本时显示some html is show。当我点击关闭按钮时,它不是{{1}我的HTML和删除。

3 个答案:

答案 0 :(得分:0)

更新dom后更新配置对象

config.btn.click(function(){
    $('#container').append($('#overlay').html())
    $('.popupdata').html('<div class="hello">xxxx</div>'+
                         '<a href=""  id="closeBtn" >X Close</a></div>');
    config.overlayClick= $('.overlay');
    config.closeBtnSelector = '#closeBtn'
    return false;
  })

答案 1 :(得分:0)

问题是您在将元素添加到页面之前选择它们。在将选择器添加到页面后,您需要填充选择器。

....append(...);
....html(...);
config.overlayClick = $('.overlay'); 
...

或者您需要选择项目而不是使用变量。

答案 2 :(得分:0)

var config ={
  btn:$('#btn'),
  hello:$('.hello'),
  bodyClickEvent: $("body"),
  overlayClick: $('#overlay'),
  closeBtnSelector: '#closeBtn',
};

因为上面调用#overlay时元素$('#overlay')不存在,所以$('#overlay')会返回一个空列表。

以下代码应该有效:

var config ={
  btn:$('#btn'),
  hello:$('.hello'),
  bodyClickEvent: $("body"),
  overlayClickSelector: '#overlay',
  closeBtnSelector: '#closeBtn',
};

config.bodyClickEvent.on("click", config.closeBtnSelector, function () {         
  $(config.overlayClick).remove();
});