Avatar billede asgaard Nybegynder
25. marts 2013 - 14:46 Der er 11 kommentarer

jQuery Hover Dynamic Content Problem

Hej.

Sidder lidt fast med et hover problem.
Simpel vil jeg gerne have hover func til at skifter class når man hover classen: .hover

Før hen brugte jeg live men nu er den jo "deprecated"


jQuery(document).ready(function($) {


$(".hover").on({
click: function(){
    console.log('enter!');
},
mouseenter: function(){
    $(this).toggleClass("highlight");
},
mouseleave: function(){
    $(this).toggleClass("highlight");
}
});

// Test til at lave Dynamic Content.
var i = 0;
$('div.test2').on('click', function( event ) {
i++;
$('<div id="'+i+'" class="hover">'+i+'</div>').appendTo( "body" );
});

});
Avatar billede olebole Juniormester
25. marts 2013 - 15:00 #1
<ole>

Du kan bruge on:

<div id="foo">
    <div>Ole</div>
    <div>Bole</div>
    <div>Bum</div>
</div>

<script type="text/javascript">
$("#foo").on("click", "div", function(evnt){
    alert($(this).text());
});
</script>

/mvh
</bole>
Avatar billede olebole Juniormester
25. marts 2013 - 15:05 #2
PS: En ID må ikke begynde med et tal, så koden i dit eget eksempel holder ikke helt vand  =)
Avatar billede asgaard Nybegynder
25. marts 2013 - 15:31 #3
Hej olebole

Kan fint få click func til at virke problemet
Men problemet er hover med Dynamic Content
Avatar billede asgaard Nybegynder
25. marts 2013 - 15:41 #4
Dette virker fx ikke :( :


jQuery(document).ready(function($) {

// Test til at lave Dynamic Content.
var i = 0;
$('div.test2').on('click', function( event ) {
i++;
$('<div class="hover">'+i+'</div>').appendTo( "body" );
});



$(".hover").on({
mouseenter: function(){
    $(this).toggleClass("highlight");
},
mouseleave: function(){
    $(this).toggleClass("highlight");
}
});
Avatar billede olebole Juniormester
25. marts 2013 - 15:46 #5
$("#foo").on("mouseover", "div", function(event){
    alert($(this).text());
});
Avatar billede asgaard Nybegynder
25. marts 2013 - 16:16 #6
Problemet er jeg gerne vil have hover til at virke med Dynamic content.

Dette virker fint, men er ikke Dynamic:

jQuery(document).ready(function($) {

$(".foo").on("mouseenter", ".hover", function(event){
    console.log("test");
    $(this).toggleClass("highlight");
  }).on("mouseleave", ".hover", function(event){
    console.log("test");
    $(this).toggleClass("highlight");
});
 
});


<html>
<head>

</head>
<body style="padding:30px;">

<div id="foo1" class="foo"><div class="hover">Bole_1</div></div>
<div id="foo2" class="foo"><div class="hover">Bole_2</div></div>
<div id="foo3" class="foo"><div class="hover">Bole_3</div></div>

<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="test.js"></script>
</body>
</html>



Dette virker ikke, og er Dynamic:

jQuery(document).ready(function($) {

// Test til at lave Dynamic Content.
var i = 1;
$('div.test2').on('click', function( event ) {
i++;
$('<div id="foo'+i+'" class="foo"><div class="hover">Bole_'+i+'</div></div>').appendTo( "body" );
});

$(".foo").on("mouseenter", ".hover", function(event){
    console.log("test");
    $(this).toggleClass("highlight");
  }).on("mouseleave", ".hover", function(event){
    console.log("test");
    $(this).toggleClass("highlight");
});
 
 
});


<html>
<head>

</head>
<body style="padding:30px;">

<div class="test2" style="height:30px;width:40px;background:#232323;margin-top:30px;"></div>


<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="test.js"></script>
</body>
</html>
Avatar billede olebole Juniormester
25. marts 2013 - 17:09 #7
Det er heller ikke i nærheden af den løsning, jeg foreslår. Dén virker helt fint - selv når der bliver indsat med innerHTML:

<p><button onclick="insert()">Insert</button></p>


<div id="foo">
    <div>Ole</div>
    <div>Bole</div>
    <div>Bum</div>
</div>

<script type="text/javascript">
function insert() {
    document.getElementById("foo").innerHTML += "<div>Hey</div><div>Hop</div>"
}

$("#foo").on("mouseover", "div", function(evnt){
    console.log("Over på DIV med teksten: " + $(this).text());
})
.on("mouseout", "div", function(evnt){
    console.log("Out på DIV med teksten: " + $(this).text());
});
</script>
Avatar billede asgaard Nybegynder
25. marts 2013 - 17:30 #8
Udmærket løsning, virker.
Er det muligt at tilfører diven til body og ikke som en sub div?

Mvh lasse
Avatar billede olebole Juniormester
25. marts 2013 - 18:10 #9
Ja, du bruger bare din egen insert, og så sætter du handler'ne på body i stedet for foo
Avatar billede olebole Juniormester
25. marts 2013 - 18:13 #10
- men jeg tvivler på, dt er en særlig god løsning. Men det er den bedste, når vi ikke ved, hvad du skal lave
Avatar billede asgaard Nybegynder
26. marts 2013 - 18:34 #11
Mange tak olebole, fik det til at virke med en alternativ løsning, ud fra din løsning. Så tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester