2013-01-18 18 views
5

Ok qui l'esempio jsfiddleJquery su evento non è vincolante per gli elementi non esistenti

http://jsfiddle.net/HTjCT/1/

Come si può vedere quando si passa non sta sparando evento mouseover

come posso risolvere questo problema?

sto usando Jquery 1,9

<div id='superdiv'>Click Me</div> 


$(function() { 
    $('#superdiv').on('click', function (event) { 
     $('body').append('<div id="super">another'); 
    }); 
    $('#super').on('mouseover', function (event) { 
     alert('not working'); 
    }); 
}); 

javascript

risposta

9

Devi usare "delegare", come questo (per la fornitura di "live") $('body').on('mouseover', '#super', function (event) {

+0

grazie di lavoro :) – MonsterMMORPG

+8

Mentre questo è corretto, si prega di non iniziare a fissare tutti i vostri gestori di eventi al corpo. La delega degli eventi funziona catturando * ogni * evento che bolle e poi ispezionando l'elemento source per vedere se corrisponde all'elemento di interesse ('# super' qui). Quindi ogni volta che tocchi il mouse ** qualsiasi cosa ** sulla pagina stai incorrendo in un colpo per verificare se quell'elemento corrisponde. Metti i tuoi delegati il ​​più possibile locali alla fonte, e otterrai prestazioni migliori, piuttosto che attenersi al corpo ogni volta – WickyNilliams

+0

Questo è assolutamente vero, è stato solo per questo esempio mostrare i delegati. –

-1

Il div si desidera creare onclick, non sono chiusi con il tag '</div>'.

Che cosa succede se si tenta il seguente codice:

$(function() { 
    $('#superdiv').on('click', function (event) { 
     $('body').append(
      $('<div/>',{ 'id' : 'super', 'text' : 'tetet'}).mouseover(function(event) { 
        alert('test'); 
      }) 
     ); 
    }); 
}); 
+0

voi, ma ancora non fa differenza :) http://jsfiddle.net/HTjCT/5/ – MonsterMMORPG

0

Si può anche avvolgere il mouse sopra evento in una funzione e chiamala ogni volta che aggiungi nuovi elementi che vuoi siano interessati. In questo modo il problema segnalato da WickyNilliams non avrà alcun effetto su di te.

$(function() { 
    $('#superdiv').on('click', function (event) { 
     $('body').append('<div id="super">another'); 
     mouse(); 
    }); 
    function mouse() { 
     $('#super').on('mouseover', function (event) { 
      alert('not working'); 
     }); 
    }); 
    mouse(); 
}