2012-08-15 8 views
5

के रूप में आप 2 बटन (= 2 divs) "क्षेत्र" और "स्रोत" है jsfiddle http://jsfiddle.net/C8B8g/7/ पर देख सकते हैं। माउस पर प्रत्येक div को हाइलाइट किया जाता है (नीली पृष्ठभूमि) (स्टैक ओवरफ्लो योगदानकर्ताओं के कारण धन्यवाद क्योंकि मैं अभी भी जेएस में बहुत खराब हूं)।DIV बदलें रंग जब एक अन्य DIV क्लिक किया जाता है

मैंने देखा है कि उपयोगकर्ताओं को वास्तव में यह नहीं पता है कि ये बटन हैं इसलिए मैं ऐसा करना चाहता हूं कि पहले डीआईवी को "हमारा क्षेत्र" टेक्स्ट को डिफ़ॉल्ट रूप से नीली पृष्ठभूमि के साथ हाइलाइट किया जाए और केवल सफेद पृष्ठभूमि पर वापस आओ जब टेक्स्ट "हमारा स्रोत" युक्त अन्य div क्लिक किया जाता है (उस स्थिति में "हमारा स्रोत" पृष्ठभूमि नीली हो जाएगी)। कुछ परीक्षण किए गए "वर्तमान" सीएसएस में लेकिन सफलता नहीं मिली का उपयोग कर ...

उत्तर

6

इस प्रयास करें: अपडेट किया गया: Here is working jsFiddle.

$('.activity-title a:first').css({'background-color':'#f00','color':'#fff'}); 
//for setting first button highlighted by default, 
//don't forgot to define document.ready before this 

$('.activity-title a').click(function() { 
    var region = $(this).attr('data-region'); 

    $('.activity-title a').css({'background-color':'#fff','color':'#467FD9'}); 
    $(this).css({'background-color':'#f00','color':'#fff'}); 

    $('.textzone:visible').stop().fadeOut(500, function() { 
    //don't forgot to add stop() for preventing repeat click conflict 
     $('#' + region).fadeIn(500); 
    }); 

    return false; 

});​ 
+0

कृपया यह क्यों बेहतर जवाब के लिए downvoted है लिखें। –

+0

धन्यवाद - यह बढ़िया काम करता है! डिफ़ॉल्ट रूप से हाइलाइट किया गया पहला बटन रखने का कोई तरीका है? (चूंकि दाईं ओर स्थित टेक्स्ट ज़ोन दिखाई देता है, इससे लोगों को यह समझने में मदद मिलेगी कि प्रत्येक बटन टेक्स्ट ज़ोन से जुड़ा हुआ है) – Greg

+0

@ ग्रेग मैंने अपना उत्तर साथी अपडेट किया है, आप इन सीएसएस मानों को कक्षा या आईडी में असाइन कर सकते हैं, और removeClass का उपयोग कर सकते हैं/addClass विधियों लेकिन आपने पूछा कि jQuery के साथ सीएसएस कैसे बदलें, इसलिए मैंने इस तरह उत्तर दिया। –

1
try with this exemple: 
<div id="target"> 
Test1 
</div> 
<div id="other"> 
    Test2 
</div> 

<script> 
$("#target").click(function() { 
    $('#target').css({'background':'blue'}); 
$('#other').css({'background':'white'}); 
}); 

$("#other").click(function() { 
    $('#other').css({'background':'blue'}); 
    $('#target').css({'background':'white'}); 
}); 
</script> 
5

चयनित div

.source-selected { 
    background-color:#00F; 
} 

जोड़ें के लिए शैली जोड़ें यह कक्षा आपके डिफ़ॉल्ट div पर।

आपके क्लिक हैंडलर (अद्यतन) को यह पंक्तियां जोड़ें

if(!$(this).closest('.source-title-box').hasClass('source-selected')) 
{ 
    $('.source-title-box').toggleClass('source-selected'); 
} 

अद्यतन बेला का प्रयास करें:

http://jsfiddle.net/dmvcQ/1

+1

मुझे आपके दृष्टिकोण को बेहतर पसंद है क्योंकि यह इनलाइन सीएसएस से बचाता है। हालांकि यह कक्षा को वैकल्पिक रूप से लागू करेगा, इससे कोई फर्क नहीं पड़ता कि आप किस लिंक पर क्लिक करते हैं। आपके द्वारा जोड़े गए किसी भी पंक्ति से पहले आपको एक और पंक्ति में जोड़ना होगा, इस तरह कुछ: '$ ('स्रोत-चयनित')। टॉगल क्लास ('स्रोत-चयनित');' – Jeemusu

+0

आप शायद जांचना चाहेंगे निकटतम ('स्रोत-शीर्षक-बॉक्स'), क्योंकि आपका कोड उन सभी का चयन करता है। – Jeemusu

+0

आप सही हैं, मैं तेज़ होने की कोशिश कर रहा था;) मैंने आपकी टिप्पणियों के अनुसार पहेली और अद्यतन उत्तर तय कर दिया है। धन्यवाद। –

3

ठीक है, मैं वहाँ के रूप में अपने कोड के कुछ भागों थे एक जवाब पद का फैसला किया कि मैं संबोधित करना चाहता था।

सबसे पहले, return false; अंत में करने के बजाय, आप jQuery event.preventDefault(); फ़ंक्शन का उपयोग कर सकते हैं। अंतिम परिणाम मूल रूप से वही है, हालांकि यह इस तरह से कर रहा है कि हम किसी भी अन्य कोड को चलाने से पहले, एंकर को बहुत शुरुआत में कुछ भी करने के लिए बताने के लिए jQuery का उपयोग नहीं कर सकते।

मेरे अद्यतन Javascript कोड:

$('.source-title-box a').click(function(event) { 

    // Stop the default anchor behaviour 
    event.preventDefault(); 

    // Lets check if the clicked link is already active 
    // And if it is active, don't let them click it! 
    if($(this).closest('div').hasClass('active')) { 
     return false; 
    } 

    // Now lets remove any active classes that exist 
    $('.active').toggleClass('active'); 

    // And apply an active class to the clicked buttons 
    // parent div 
    $(this).closest('div').toggleClass('active'); 

    var region = $(this).attr('data-region'); 

    $('.textzone:visible').fadeOut(500, function() { 
     $('#' + region).fadeIn(500); 
    }); 
});​ 

सीएसएस मैं कहा:

.active { 
    background-color:#467FD9; 
    color:#fff; 

} 
.active a { 
    cursor:default; /* Don't show the hand cursor */ 
    color:#fff; 
} 

एक कार्य उदाहरण:

http://jsfiddle.net/dmvcQ/3/

मुझे यकीन है कि नहीं कर रहा हूँ अगर वर्तमान HTML मार्कअप के मन में कुछ अन्य उद्देश्य है, लेकिन वर्तमान शैलियों और functionali Ty सिर्फ एक <a href="#" data-region="source-region">Our region</a> आप उन्हें एक <div> और एक <span> में रैप करने के लिए की जरूरत नहीं है के साथ प्राप्त किया जा सकता है।

उदाहरण यहाँ के लिए, एक ही कोड है सिर्फ लंगर टैग के साथ: http://jsfiddle.net/dmvcQ/7/

मुझे पता है कि तुम जवाब के बारे में कोई प्रश्न हैं करते हैं।

+1

उत्तर Jeemusu के लिए धन्यवाद! लाइव वातावरण में किसी कारण से (पेज "स्रोत" पर क्लिक करें http://goo.gl/fOHGN) पहला 'बटन' डिफ़ॉल्ट रूप से jsfiddle पर हाइलाइट नहीं किया जाता है। क्या आप जानते होंगे क्यों? धन्यवाद – Greg

+1

क्या आपने सक्रिय कक्षा को HTML तत्व में जोड़ा है जो डिफ़ॉल्ट रूप से चयनित के रूप में दिखाना है। यह देखने के लिए कि मैंने इसे कैसे सेट किया है, मेरी जेएस पहेली देखें। – Jeemusu

+0

ओह, मुझे वह याद आया - यह अभी ठीक है, आपकी मदद के लिए बहुत बहुत धन्यवाद! – Greg

1

या आप यह मुख्य रूप से jQuery

एक काम कर उदाहरण कर सकते हैं:

http://jsfiddle.net/razmig/GhbjS/

$('.activity-title a:first').css({ 
    "background-color": "#467FD9", 
    "color": "#fff" 
}); 


$('.activity-title a').mouseover(function() { 
    $('.activity-title a').css({ 
     "background-color": "#fff", 
     "color": "#467FD9" 
    }); 
    $(this).css({ 
     "background-color": "#467FD9", 
     "color": "#fff" 
    }); 

}); 

$('.activity-title a').click(function() { 
    var region = $(this).attr('data-region'); 

    $('.textzone:visible').fadeOut(2000, function() { 
     $('#' + region).fadeIn(2000); 
    }); 

    return false; 

}); 
+0

आपके उत्तर और कामकाजी उदाहरण के लिए धन्यवाद। मैंने देखा है कि आप href = "#" के लिए html बदलते हैं। दुर्भाग्यवश मेरे मामले में (एक पृष्ठ लेआउट प्रति अनुभाग के साथ एक पृष्ठ लेआउट) जो काम नहीं करता है (बटन पर क्लिक करने से पृष्ठ शीर्ष पर स्क्रॉल हो जाता है। – Greg

+1

बस href = "जावास्क्रिप्ट: शून्य (0)" या jquery u event.preventDefault() का उपयोग कर सकते हैं; – Razmig