2011-11-20 17 views
5

Controllare questo codice: http://jsfiddle.net/ZXN4S/1/Problema con jQuery slideDown()

HTML:

<div class="input"> 
    <input type="text" size="50" id="test_input"> 
    <input type="submit" value="send" id="test_submit"> 
</div> 

<ul> 
    <li class="clear"> 
     <div class="comment"> 
      <div class="image"> 
      <img src="http://www.chooseby.info/materiale/Alcantara-Black_granito_nero_naturale_lucido_3754.jpg"> 
      </div> 
      <div class="info"> 
      <div class="name">Name</div> 
      <div class="text">text</div> 
      <div class="timestamp">timestamp</div> 
      </div> 
     </div> 
    </li> 
</ul> 

jQuery:

$(document).ready(function() { 
    $("#test_submit").click(function() { 
     $.post('/echo/json/', function(data) { 
      last = $("ul li:first-child"); 
      new_line = last.clone(); 
      new_line.hide(); 
      last.before(new_line); 
      new_line.slideDown('slow'); 
     }); 

     return false; 
    }); 
}); 

Se si tenta di inserire un testo nel campo di immissione e fare clic su l'invio puoi vedere il problema di cui sto parlando. Quando scivola verso il basso, l'altezza della diapositiva è errata e l'effetto è brutto. Ma se si rimuove il div info funziona bene. Come posso risolvere?

+0

: SI deve andare a mangiare ... questo è cosa farei http://jsfiddle.net/xTFHt/ –

risposta

1

Thi s trucco sembra risolvere il problema:

ul li .info { 
    float: right; 
    width: 485px; // fixed width to the div 
} 
0

Dopo aver giocato in JS Fiddle, questo sembra aver fatto il trucco:

nel CSS, ul li .info { }

Add: height: 50px;

+0

Sì, l'ho fatto anch'io. Il problema è che il testo è variabile, quindi non posso correggere l'altezza 'li'. –

1

Ambito:

ul li .info { 
    float: left; 
} 

ha fatto per me (testato in cromo)

+0

Bello ma se l'altezza del testo è più alta dell'altezza dell'immagine, il testo va nella parte inferiore dell'immagine. Fortunatamente sembra che abbia trovato un trucco, controlla la mia nuova risposta. –

1

Il problema è semplicemente il modello di layout. Puoi aggiungere overflow: nascosto per dare il layout a un elemento nella maggior parte dei browser:

ul li .info { 
    overflow: hidden; 
} 

Lo risolverà anche. Puoi anche correggere la tua larghezza, ma non è necessario.

Bonus aiuto saccente che non hai realmente chiedere:

Stai usando "return false" per evitare che l'evento predefinito. C'è una funzione per questo, che è più efficiente in termini di come gli eventi bolla. È sufficiente passare l'evento nella funzione (è possibile utilizzare qualsiasi nome che si desidera, ma mi chiamano "evento" per chiarezza) e quindi chiamare preventDefault() su di esso:

$("#test_submit").click(function(event) { 
    event.preventDefault() 
// ... the rest of your code ... // 
}); 
+0

Grazie per il 'event.preventDefault()'. Ma per la prima risposta non funziona con 'overflow: hidden;'. –

+0

L'ho provato contro il tuo violino; ha funzionato esattamente come il float più il codice di larghezza che hai postato per una risposta. Forse una cosa di compatibilità del browser? Quale browser/sistema operativo? –

+0

Firefox e OS X Lion. Btw, probabilmente il mio modo è il migliore per la compatibilità del browser. –