2012-03-28 26 views
18

मेरे पास टिप्पणियों की एक प्रणाली है, और प्रत्येक टिप्पणी में एक बटन होता है जो आमतौर पर इसके उत्तरों की संख्या प्रदर्शित करता है। मैं चाहता हूं कि जब कोई उपयोगकर्ता बटन पर हो जाता है, तो पाठ "3 उत्तरों" से "उत्तर दें" में बदल जाता है, और फिर, जब माउस बटन छोड़ देता है, तो टेक्स्ट "3 उत्तरों" पर वापस आता है।होवर पर टेक्स्ट बदलें, फिर पिछले टेक्स्ट पर वापस जाएं

क्योंकि प्रत्येक टिप्पणी के लिए उत्तरों की संख्या भिन्न होती है, इसलिए मैं एक साधारण माउसओवर/माउसआउट स्क्रिप्ट नहीं कर सकता। इसके चारों ओर जाने का एक तरीका एक चर के रूप में उत्तरों की संख्या को पारित करना होगा, और इसकी देखभाल करने के लिए एक छोटा सा कार्य करना होगा। लेकिन एक आसान तरीका होना चाहिए। मैंने टैग की सामग्री को बदलने के लिए सीएसएस में होवर चीज का उपयोग करने की कोशिश की (सीएसएस संपत्ति सामग्री के साथ), लेकिन अभी तक कोई भाग्य नहीं है।

किसी भी मदद की सराहना की, धन्यवाद!

+1

यह एक बुरा डिजाइन की तरह लगता है। उपयोगकर्ता कैसे अनुमान लगाएगा कि उन्हें टेक्स्ट को होवर करना चाहिए जो उन्हें बताता है कि अपने उत्तर का जवाब देने के लिए कितने जवाब हैं? टेक्स्ट पर भरोसा करने के बजाय, इसे एक अवधि के अंदर लपेटें और उस तत्व को लक्षित करें। – MetalFrog

+0

@ मेटलफ्रोग टेक्स्ट में एक बटन की उपस्थिति है, मुझे नहीं लगता कि इसे समझने में बहुत अधिक समय लगेगा। – Sophivorus

उत्तर

38

हां, आप सीएसएस content का उपयोग कर सकते हैं। सामान्य पाठ और "उत्तर दें!" के बीच स्विच करने के लिए, सामान्य पाठ को span में रखें और होवर करते समय इसे छुपाएं।

HTML:

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

सीएसएस:

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

jsFiddle:

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

संपादित करें: इस IE8 में काम करता है, लेकिन इसकी संगतता मोड में नहीं है, इसलिए मुझे लगता है आईई 7 बाहर है। क्या यह एक समस्या होगी?

+0

नहीं, यह कोई समस्या नहीं होगी। धन्यवाद, बहुत ही सरल समाधान। – Sophivorus

+0

अच्छा समाधान .... – Muath

+0

किसी कारण से यह मेरे लिए काम नहीं करता है। बदल रहा है ': पहले से '': मदद के बाद। –

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'); 
      } 
     }); 
    } 
); 

मैं तुम्हें समारोह में इस तरह इस्तेमाल कर सकते हैं लगता है, जब आप मँडरा बंद करो, तुम को खिलाने के ajax अपनी टिप्पणी कॉल आईडी, और यह कि टिप्पणी के लिए उत्तर की # देता है। आप तय कर सकते हैं कि आप अपनी टिप्पणी आईडी कैसे स्टोर/पुनर्प्राप्त करना चाहते हैं।

+1

@tada मैं बिल्कुल सहमत हूं। – jbabey

+0

जैसा कि मैंने कहा, उत्तरों की संख्या प्रत्येक टिप्पणी के साथ भिन्न होती है, इसलिए यह फ़ंक्शन चाल नहीं करेगा। – Sophivorus

+0

क्या संख्या को एक नंबर स्टोर करता है? एक डेटाबेस? शायद # उत्तरों को पकड़ने के लिए एक AJAX कॉल फ़ंक्शन डाल सकता है। –

1

मैं jQuery .hover() और jQuery का एक संयोजन का प्रयोग करेंगे .data():

http://jsfiddle.net/5W4Bd/

HTML:

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

जावास्क्रिप्ट:

$('#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); 
    }); 

संपादित करें: गुमनाम refactor करने के लिए स्वतंत्र लग रहा है कामकाज होवर करने के लिए दो कॉलबैक के रूप में उपयोग किया जाता है, क्योंकि वे बिल्कुल वही हैं :)

+0

अरे, उत्तर के लिए धन्यवाद। मैंने सोचा था कि डेटा() फ़ंक्शन का उपयोग बहुत ही सुरुचिपूर्ण था, इसलिए मैं आपके काम को करने की कोशिश कर रहा था, लेकिन श्री लिस्टर ने एक आसान समाधान पोस्ट किया। – Sophivorus

+0

@LFS अच्छा, मुझे उस सामग्री विशेषता के बारे में भी पता नहीं था! – jbabey

15

मुझे लगता है कि यह इसके लिए जाने का एक सीधा तरीका होगा। अपने बटन के अंदर दो स्पैन का उपयोग करें, एक सामग्री 'x उत्तरों' के साथ, एक सामग्री 'उत्तर!' के साथ। सीएसएस का उपयोग करना और: होवर, आप बस स्विच करें कि होवर पर कौन सा अवधि दिखाया गया है।

HTML:

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

सीएसएस:

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

JsFiddle उदाहरण की जाँच करें।यह सब कुछ के बारे में ठीक काम करता है, क्योंकि यह समान आधारभूत लक्ष्य प्राप्त करने के लिए बहुत ही बुनियादी चीजों का उपयोग करता है।

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

सीएसएस:

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

बहुत आसान समाधान, धन्यवाद! – Sophivorus

1

किसी मेनू लिंक पर एक ही कोशिश करना चाहता है, (हॉवर पर अलग भाषा पाठ) यहाँ jsfiddle example

एचटीएमएल है ऐसा करने का तरीका, बटन के साथ दो स्पैन बनाना है, और प्रत्येक अवधि के लिए कक्षाएं हैं।

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

दूसरा एक खाली रहने दें, और सीएसएस में, लिखें:

button{ 
    //your decorative code here } 

button:hover .replies{ 
    display: none; } 

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

यह पहला जवाब देने के लिए समान है, लेकिन है कि इसका जवाब हमेशा एस.ए.एस.एस., या उससे कम की तरह एक पूर्वप्रक्रमक के साथ काम नहीं करता।

0

के रूप में सरल रूप में यह हो सकता है:

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

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

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

}, function() { 

    $('#current_filter').text(original); 
}); 
संबंधित मुद्दे