2013-01-18 6 views
5

Ok hier das jsfiddle BeispielJQuery auf Ereignis ist nicht bindend für nicht vorhandene Elemente

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

Wie Sie sehen Sie, wenn Sie es schweben wird Mouseover-Ereignis nicht ausgelöst

wie kann ich dieses Problem lösen Problem ?

ich bin mit 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

Antwort

9

Sie haben „delegieren“ zu verwenden, wie dies („live“ zu liefern) $('body').on('mouseover', '#super', function (event) {

+0

Dank :) – MonsterMMORPG

+8

Während dieser Arbeit richtig ist, bitte nicht anfangen, alle Ihre Event-Handler die Anbringung Karosserie. Die Ereignisdelegierung funktioniert, indem * jedes * Ereignis, das aufsteigt, erfasst wird und dann das Quellenelement überprüft wird, um festzustellen, ob es mit dem Element von Interesse übereinstimmt ("# super" hier). Jedes Mal, wenn Sie auf der Seite mit ** irgendetwas ** vorgehen, wird ein Treffer ausgelöst, um zu prüfen, ob das Element übereinstimmt. Setzen Sie Ihre Delegierten so lokal wie möglich zu der Quelle, und Sie werden eine bessere Leistung erhalten, anstatt jedes Mal an den Körper zu hängen. – WickyNilliams

+0

Das ist absolut richtig, es war nur für dieses Beispiel, Delegat anzuzeigen. –

-1

Die div Sie Onclick erstellen möchten, mit dem '</div>' ist nicht Tag geschlossen.

Was ist, wenn Sie den folgenden Code versuchen:

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

sich aber immer noch nicht Unterschied macht :) http://jsfiddle.net/HTjCT/5/ – MonsterMMORPG

0

Sie auch die Maus über Ereignis wickeln können in einer Funktion, und rufen Sie es auf, wenn Sie neue Elemente hinzufügen, die betroffen sein sollen. Auf diese Weise wird das Problem, auf das WickyNilliams hingewiesen hat, keinen Einfluss auf dich haben.

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