Lavoro con l’evento.stopPropagation() su firefox e IE

Perché non è questo il codice del lavoro per Firefox e IE?
Va bene su chrome.

$(document).click(function(e) {
    if ($(".contentIconDesk").hasClass('markIconDesk')) {           
        $(".contentIconDesk").removeClass('markIconDesk');          
        wndSelected = "";   
    }       
});

function markMe(icon, wnd) {
    event.stopPropagation();            
    if ($('#'+icon).hasClass('markIconDesk')) {
        $(".contentIconDesk").removeClass('markIconDesk');
        wndSelected = "";               
    } else {
        $(".contentIconDesk").removeClass('markIconDesk');
        $('#'+icon).addClass('markIconDesk');
        wndSelected = wnd;                  
    }       
};

La funzione MarkMe(); è chiamato in caso onClick() di alcuni div nel mio HTML. Il problema è con il event.stopPropagation(). Quando faccio clic su per aggiungere la classe, il browser di prendere un clic su $(document).

Se c’è un buon suggerimento, invece di utilizzare il codice di cui sopra, sarà grande.

  • Posta il codice HTML per il div che si sta utilizzando troppo..
  • È possibile ottenere il promotore dell’evento click di eventi.di destinazione, vedere api.jquery.com/event.target, per esempio if ($(e.target).is("div")) return; nel documento, fare clic su associazione.
  • Perché stai usando jQuery e onclick evento-gestori?
  • Grazie @Walid. Il tuo suggerimento è stato molto utile.
  • Non riesco a trovare un modo per ottenere i parametri come questo: onclick="markMe($(this).attr('id'), 'stores');" utilizzando la funzione jQuery: $("#icon_1").click(). Scusa, ma io sono un principiante in js e jQuery. Ma sto studiando poco.
InformationsquelleAutor Christian | 2013-04-19



4 Replies
  1. 5

    Si può provare questo. Per il div in HTML, modificarlo come questo:

    <div id="something1" onclick="markMe('icon1', 'wnd1', event)">
    <div id="something2" onclick="markMe('icon2', 'wnd2', event)">
    <div id="something3" onclick="markMe('icon3', 'wnd3', event)">

    E nel tuo js come:

    function markMe(icon, wnd, e) {
    
        if (!e) var e = window.event;
        e.stopPropagation();
    
        $(".contentIconDesk").removeClass('markIconDesk');
        if ($('#' + icon).hasClass('markIconDesk')) {
            wndSelected = "";
        } else {
            $('#' + icon).addClass('markIconDesk');
            wndSelected = wnd;
        }
    };
    • ha funzionato. Grazie Palash.
    • Felice ha aiutato!
  2. 3

    IE non supporta stopPropagation metodo DOM. È possibile utilizzare l’evento.cancelBubble = true (voglio dire, cancelBubble proprietà dell’oggetto evento), invece. Guarda questo

  3. 1

    Perché event non è definita in questo pezzo di codice:

    event.stopPropagation();
    • Penso che si dovrebbe ri-leggere la sua risposta
    • che non avrebbe funzionato. Non ha nemmeno senso che in tale funzione. Essa appartiene al gestore di clic, se ovunque. 🙂
  4. 1

    Avrete bisogno di passare l’evento come parametro al tuo MarkMe funzione

    function markMe(icon, wnd, event) {
       event.stopPropagation(); 
       //...
    }

    Poi quando si chiama, dovrebbe assomigliare a questo :

    $('#myDiv').click(function(e) {
        //...
        MarkMe(icon, wnd, e);
    });
    • sì, ma con $(‘#myDiv’).click(function(e), come si deve so in quale icona l’utente ha cliccato?

Lascia un commento