ฉันมีเว็บไซต์ที่พัฒนาบน Drupal ฉันใช้โมดูลที่เรียกว่า collsiblock (โดยพื้นฐานแล้วเป็นปลั๊กอิน JQuery) เพื่อให้ได้ผลเหมือนหีบเพลง มันทำงานได้ดีกับฉัน (แม้ว่าจะอยู่ในเบต้า) แต่ฉันต้องการแก้ไขเพื่อให้เมื่อผู้ใช้คลิกที่หีบเพลงรายการหนึ่งรายการอื่น ๆ จะยุบลง
ในสถิติปัจจุบันมันทำงานในลักษณะที่เมื่อผู้ใช้คลิกที่รายการหนึ่งระบบจะตรวจสอบว่ารายการนั้นยุบหรือขยายแล้วหรือไม่และจะทำให้รายการนั้นตรงกันข้าม นั่นหมายความว่าหากผู้ใช้คลิกที่รายการหนึ่งรายการนั้นจะขยายออกและหากผู้ใช้คลิกที่รายการอื่นระบบจะขยายด้วย แต่จะไม่ยุบรายการที่คลิกก่อนหน้านี้
คุณสามารถดูรหัสด้านล่าง ฉันรู้ว่าควรเพิ่มโค้ดเพื่อยุบและยุบและขยายอย่างไร คำถามของฉันคือฉันจะเลือกรายการทั้งหมดที่มีคลาส ".collapsiblock" ได้อย่างไรยกเว้นรายการที่ผู้ใช้คลิก ??
หมายเหตุ: ไอเท็มที่มีคลาส ".collapsiblockCollapsed" จะถูกยุบและถ้าคลาสนี้ถูกลบออกจากไอเท็มจะได้รับการขยาย
// $Id: collapsiblock.js,v 1.6 2010/08/18 19:17:37 gagarine Exp $
Drupal.Collapsiblock = Drupal.Collapsiblock || {};
Drupal.behaviors.collapsiblock = function (context) {
var cookieData = Drupal.Collapsiblock.getCookieData();
var slidetype = Drupal.settings.collapsiblock.slide_type;
var defaultState = Drupal.settings.collapsiblock.default_state;
var slidespeed = parseInt(Drupal.settings.collapsiblock.slide_speed);
$('div.block:not(.collapsiblock-processed)', context).addClass('collapsiblock-processed').each(function () {
var id = this.id;
var titleElt = $(':header:first', this).not($('.content :header',this));
if (titleElt.size()) {
titleElt = titleElt[0];
// Status values: 1 = not collapsible, 2 = collapsible and expanded, 3 = collapsible and collapsed, 4 = always collapsed
var stat = Drupal.settings.collapsiblock.blocks[this.id] ? Drupal.settings.collapsiblock.blocks[this.id] : defaultState;
if (stat == 1) {
return;
}
titleElt.target = $(this).find('div.content');
$(titleElt)
.addClass('collapsiblock')
.click(function () {
var st = Drupal.Collapsiblock.getCookieData();
if ($(this).is('.collapsiblockCollapsed')) {
$(this).removeClass('collapsiblockCollapsed');
if (slidetype == 1) {
$(this.target).slideDown(slidespeed);
}
else {
$(this.target).animate({height:'show', opacity:'show'}, slidespeed);
}
// Don't save cookie data if the block is always collapsed.
if (stat != 4) {
st[id] = 1;
}
}
else {
$(this).addClass('collapsiblockCollapsed');
if (slidetype == 1) {
$(this.target).slideUp(slidespeed);
}
else {
$(this.target).animate({height:'hide', opacity:'hide'}, slidespeed);
}
// Don't save cookie data if the block is always collapsed.
if (stat != 4) {
st[id] = 0;
}
}
// Stringify the object in JSON format for saving in the cookie.
var cookieString = '{ ';
var cookieParts = [];
$.each(st, function (id, setting) {
cookieParts[cookieParts.length] = ' "' + id + '": ' + setting;
});
cookieString += cookieParts.join(', ') + ' }';
$.cookie('collapsiblock', cookieString, {path: Drupal.settings.basePath});
});
// Leave active blocks uncollapsed. If the block is expanded, do nothing.
if (stat == 4 || (cookieData[id] == 0 || (stat == 3 && cookieData[id] == undefined)) && !$(this).find('a.active').size()) {
$(titleElt).addClass('collapsiblockCollapsed');
$(titleElt.target).hide();
}
}
});
};
Drupal.Collapsiblock.getCookieData = function () {
var cookieString = $.cookie('collapsiblock');
return cookieString ? Drupal.parseJson(cookieString) : {};
};
อัพเดท:
ปัญหาได้รับการแก้ไขโดยการเพิ่มรหัสต่อไปนี้:
$('.collapsiblock').not(this).each(function(){
$(this).addClass('collapsiblockCollapsed');
$(this.target).animate({height:'hide', opacity:'hide'}, slidespeed);
});
เหนือบรรทัดต่อไปนี้:
$(this).removeClass('collapsiblockCollapsed');