如何通过子onclick禁用父级onclick后再次运行

时间:2015-05-14 18:11:46

标签: javascript jquery onclick

当我使用子onclick禁用它时,我在父进程中再次启用onclick函数时遇到问题。我的预期结果是,当单击父函数时它再次工作,但是它没有工作。所以,下面是我的代码。

function showUserInfo(ini){
   $(ini).on("click", showUserInfo);
   $(ini).find('.status').html('<i onClick="recentOpen(this)" class="fa fa-eye eyeMark"></i>');
 }

function recentOpen(ini){
   $(ini).closest('.userIntro').prop("onclick", null);
   $(ini).remove();    
}

HTML代码如:

<div onClick="showUserInfo(this)" class="userIntro"> 
  <div>Intro</div>
  <div class="status"></div>
</div>

1 个答案:

答案 0 :(得分:2)

不要混淆事件处理程序的方式。如果我理解正确,就不需要删除任何事件处理函数,只需要防止事件冒泡:

// Attach event handler to userIntro
$('.userIntro').on('click', function(){

    // Append FA Icon
    $(this).find('.status').html('<i class="fa fa-eye eyeMark">FA</i>');

// Add another handler, this time test whether the target
// is the <i> (using on()) we already appended
}).on('click', '.status > .fa', function(e){

    // Prevent the event from bubbling so the previous
    // function isn't invoked
    e.stopPropagation();

    //Remove the icon.
   $(this).remove(); 
});

或者,在附加之前将事件处理程序附加到图标:

$('.userIntro').on('click', function(){
    var $fa = $('<i class="fa fa-eye eyeMark">FA</i>').click(function(e){
        e.stopPropagation();
        $(this).remove();
    });

    $(this).find('.status').append($fa);
});

JSFiddle