2012-03-28 10 views
18

Ho un sistema di commenti e ogni commento ha un pulsante che normalmente visualizza il numero di risposte ad esso. Voglio che quando un utente passa sopra il pulsante, il testo cambia da "3 risposte" a "Rispondi!", E quindi, quando il mouse lascia il pulsante, il testo torna a "3 risposte".Cambia testo al passaggio del mouse, quindi torna al testo precedente

Poiché il numero di risposte varia per ogni commento, non è possibile eseguire un semplice script mouseover/mouseout. Un modo per aggirarlo sarebbe quello di passare il numero di risposte come variabile, e fare una piccola funzione per prendersene cura. Ma ci deve essere un modo più semplice. Ho provato ad usare: hover thing in css per modificare il contenuto del tag (con il contenuto della proprietà css), ma non ancora fortuna.

Qualsiasi aiuto apprezzato, grazie!

+1

Questo suona come una cattiva progettazione. Come può un utente supporre di dover passare il mouse sul testo che indica loro quante risposte ci sono per avviare una propria risposta? Invece di fare affidamento sul testo stesso, avvolgilo all'interno di un intervallo e scegli quel elemento. – MetalFrog

+0

@MetalFrog Il testo ha l'aspetto di un pulsante, non penso che ci vorrebbe troppo tempo per capire. – Sophivorus

risposta

38

Sì, è possibile utilizzare i CSS content. Per passare dal testo normale a "Rispondi!", Inserisci il testo normale in un span e nascondilo al passaggio del mouse.

HTML:

<button><span>3 replies</span></button> 

CSS:

button {width:6em} 
button:hover span {display:none} 
button:hover:before {content:"Reply!"} 

jsFiddle:

http://jsfiddle.net/4xcw7/2/

Edit: questo funziona in IE8, ma non nella sua modalità di compatibilità, quindi presumo IE7 è fuori. Sarebbe un problema?

+0

No, non sarebbe un problema. Grazie, soluzione molto semplice. – Sophivorus

+0

bella soluzione .... – Muath

+0

Per qualche motivo non ha funzionato per me. Cambiare ': before' to': after' aiutato. –

1
$('#button_id').hover(
    function(){ 
     $(this).text('Reply!'); 
    }, 
    function(){ 
     $.ajax({ 
      url: 'script.php', 
      type: 'post', 
      data: comment_id, 
      success: function(num_replies){ 
       $('#button_id').text(num_replies + ' replies'); 
      } 
     }); 
    } 
); 

Penso che si potrebbe utilizzare questo tipo di funzione, quando ci si ferma in bilico, si alimenta la chiamata AJAX tuo commento id, e restituisce il # delle risposte per quel commento. Puoi decidere come vuoi memorizzare/recuperare il tuo ID commento.

+1

@tada sono assolutamente d'accordo. – jbabey

+0

Come ho detto, il numero di risposte varia a ogni commento, quindi questa funzione non farà il trucco. – Sophivorus

+0

cosa memorizza il numero di una risposta? un database? Probabilmente potrebbe mettere una funzione di chiamata ajax per afferrare il numero di risposte. –

1

vorrei usare una combinazione di jQuery .hover() e jQuery .data():

http://jsfiddle.net/5W4Bd/

HTML:

<div id="myDiv">default text</div> 

javascript:

$('#myDiv') 
    .data('textToggle', 5) 
    .hover(function (e) { 
     var that = $(this); 

     // get the text from data attribute 
     var textToSet = that.data('textToggle'); 

     // save the current text so it can be reverted 
     that.data('textToggle', that.text()); 

     // set the new text 
     that.text(textToSet); 
    }, function (e) { 
     var that = $(this); 

     // get the text from data attribute 
     var textToSet = that.data('textToggle'); 

     // save the current text so it can be reverted 
     that.data('textToggle', that.text()); 

     // set the new text 
     that.text(textToSet); 
    }); 

edit: sentitevi liberi di refactoring l'anonimo functi in uso come i due callback al passaggio del mouse, poiché sono esattamente uguali :)

+0

Ehi, grazie per la risposta. Ho pensato che usare la funzione data() fosse molto elegante, quindi stavo cercando di far funzionare la tua funzione, ma il signor Lister ha pubblicato una soluzione più semplice. – Sophivorus

+0

@LFS bello, non sapevo nemmeno di quell'attributo del contenuto! – jbabey

15

Penso che questo sarebbe un modo semplice per farlo. Utilizza due span all'interno del tuo pulsante, uno con contenuto 'x risposte', uno con contenuto 'Rispondi!'. Usando i CSS e: passa il mouse, basta cambiare lo span mostrato al passaggio del mouse.

HTML:

<button> 
    <span class="replies">5 Replies</span> 
    <span class="comment">Reply!</span> 
</button> 

CSS:

button .comment { display: none; } 
button:hover .replies { display: none; } 
button:hover .comment { display: inline; } 

Controllare l'esempio JsFiddle.Funziona bene su tutto, poiché usa le cose basilari per raggiungere un obiettivo altrettanto basilare.

+0

Soluzione molto semplice, grazie! – Sophivorus

1

Se qualcuno vuole provare lo stesso sul link del menu, (diverso testo in lingua al passaggio del mouse) Ecco l'html jsfiddle example

:

<a align="center" href="#"><span>kannada</span></a> 

css:

span { 
    font-size:12px; 
} 
a { 
    color:green; 
} 
a:hover span { 
    display:none; 
} 
a:hover:before { 
    color:red; 
    font-size:24px; 
    content:"ಕನ್ನಡ"; 
} 
1

altro modo per farlo, è quello di creare due span con il pulsante, e avere classi per ogni span.

<button> 
    <span class="replies">3 Replies</span> 
    <span class="comments"></span> 
<button> 

Lasciare la seconda vuoto, e in css, scrivere:

button{ 
    //your decorative code here } 

button:hover .replies{ 
    display: none; } 

button:hover .comments:before{ 
    content:"Reply!"; } 

Questo è simile alla prima risposta, ma tale soluzione non funziona sempre con un preprocessore come SASS, o meno.

0

Tanto semplice come potrebbe essere:

$('.controls button.filter').hover(function(){ 

    var original = $('#current_filter').text(); 
    var descr = $(this).attr("title"); 

    $('#current_filter').html(descr); 

}, function() { 

    $('#current_filter').text(original); 
}); 
Problemi correlati