Как отключить родительский клик при нажатии живого ребенка? - PullRequest
0 голосов
/ 13 января 2012

Поэтому, как правило, я просто использую stopPropegation, когда мне нужно предотвратить действие по умолчанию для родительского элемента при щелчке дочернего элемента.Тем не менее, это не похоже на работу с живыми элементами.Поэтому у меня возникла идея временно удалить атрибут onclick родительского объекта, когда ребенок находится над ним.Кажется, я могу удалить его просто отлично, но я не могу добавить его обратно к элементу ... это то, что я придумал ...

$('body').delegate('.button', 'mouseenter mouseout', function(e){
        if(e.type=='mouseenter'){
          var inside = $(this).parents('.post').attr('onclick');
          $(this).parents('.post').attr('onclick','');
        }else if(e.type=='mouseout'){
          $(this).parents('.post').attr('onclick', inside);
        }
    })

Так что это удалитэлемент успешно, однако попытка добавить его обратно всегда безуспешна ... он просто пустой.Кто-нибудь может мне здесь помочь?Я полностью застрял.Я также был бы счастлив альтернативным методом достижения того же результата.Спасибо.

Ответы [ 2 ]

1 голос
/ 13 января 2012

попробуйте http://jsfiddle.net/kDuNU/4/:

$('div').live('click', function(event) {
    if ($(event.target).hasClass('button'))
       return;
    alert('hello');
});

$('.a-span').live('click', function (event) {
    alert($(this).text());
});
$('div').append('<span class="a-span button">another</span>');

<div> hello <br/>
    <span class="a-span">world</span>
</div>
0 голосов
/ 13 января 2012

Попробуйте что-то вроде этого:


if(e.type=='mouseenter'){
    $(this).parents('.post').unbind('click');
}else if(e.type=='mouseout'){
    $(this).parents('.post').bind('click');
}

//OR place your inside variable before if, like
var inside = $(this).parents('.post').attr('onclick');  //placed outside of if
if(e.type=='mouseenter'){   
   $(this).parents('.post').attr('onclick','');
}else if(e.type=='mouseout'){
   $(this).parents('.post').attr('onclick', inside);
}

Надеюсь, у вас все получится

...