2010-04-26 5 views
0

c'est la première fois que je demande ici. Désolé si la réponse est déjà disponible.Dynamique .click valeur Jquery IE numéro

J'ai un très petit script jQuery qui permet de paramétrer l'attribut onclick sur un DIV.

Il fonctionne comme des flèches droite et gauche pour certains contenus au milieu.

Fondamentalement, je définis le onclick="foo(1)" puis lorsque vous cliquez sur sld changer la valeur de 1 à 2, et continuer à changer chaque fois que je clique.

sur jQuery functio J'utilise:

$("#v_arrow_r").attr('onclick','').unbind().click(newclick_next); 

cela fonctionne comme un charme sur FF et Chrome, mais ne fonctionne pas sur IE !!!! Argh ...

ici le code:

if (start == 24) { 
var a = 0; 
var b = 0; 
} else { 
var a = start-6; 
var b = start+6; 
} 

next = "home_featured_videos(" + b + ");"; 
newclick_next = eval("(function(){"+next+"});"); 

prev = "home_featured_videos(" + a + ");"; 
newclick_prev = eval("(function(){"+prev+"});"); 

$('#video-module').css('background',''); 
$('#video-module').html(response); 

$("#v_arrow_l").attr('onclick','').unbind().click(newclick_prev); 
$("#v_arrow_r").attr('onclick','').unbind().click(newclick_next); 

Le html:

<div id="videos-home"> 
    <div class="arrow-l" id="v_arrow_l" onclick="home_featured_videos(0);"></div> 
    <div class="content" id="video-module"> 
    //CONTENT 
    </div> 
    <div class="arrow-r" id="v_arrow_r" onclick="home_featured_videos(6);"></div> 
    <div class="clear_b"></div> 
</div> 

Donc, comme je l'ai dit .. je définir le attr onclick lorsque la page ouverte. Cela fonctionne bien sur IE. mais quand je clique sur la flèche et appelle la fonction oncli est mis à null et j'ajoute la fonction à .click. IE arrête de travailler. le clic est mort.

Si quelqu'un a une idée de pourquoi cela se produit.

Merci d'avance. Cordialement

Varois

Répondre

1
$("#v_arrow_r").attr('onclick',''). 

Ne pas utiliser attr pour définir les attributs gestionnaire d'événements. Ça ne marche pas dans IE et c'est moche et inefficace partout. Si vous utilisez jQuery, utilisez les méthodes que jQuery vous propose pour la liaison d'événements, par exemple click().

Les attributs de gestionnaire d'événement en ligne sont un hack de la vieille école que vous devriez généralement éviter de toute façon.

next = "home_featured_videos(" + b + ");"; 
newclick_next = eval("(function(){"+next+"});"); 

Vous devriez presque jamais utiliser eval, et vous ne voulez certainement pas d'attribuer une nouvelle fonction de gestionnaire chaque fois qu'il ya un clic. Stockez l'état actuel dans une variable et lisez-le depuis le gestionnaire. Par exemple:

<div id="videos-home"> 
    <div class="arrow-l" id="v_arrow_l""></div> 
    <div class="content" id="video-module"> 
     //CONTENT 
    </div> 
    <div class="arrow-r" id="v_arrow_r"></div> 
    <div class="clear_b"></div> 
</div> 
<script type="text/javascript"> 

    var pagei= 0; // initial page number 
    var pagen= 4; // 4 pages (of 6 items each) 

    $('#v_arrow_l').click(function() { 
     turnpage(-1); 
    }); 
    $('#v_arrow_r').click(function() { 
     turnpage(1); 
    }); 

    function turnpage(d) { 
     pagei= (pagei+pagen+d)%pagen; 
     $('#video-module').css('background',''); 
     $('#video-module').html('Page '+pagei); // or load() some AJAX or whatever 
    } 

</script> 
+0

Réponse impressionnante. Merci beaucoup. Fonctionne très bien. – Varois