2012-01-06 2 views
0

Можно ли переключать (переключать) атрибут rel так же, как классы могут переключаться в jquery? http://api.jquery.com/toggleClass/Jquery rel toggle?

Я пытаюсь создать кнопку, которая при нажатии изменит (переключит) атрибут rel другой кнопки. Надеюсь, это имеет смысл.

Im довольно новичок в этом и не уверен, что я внедрил ваш код правильно, но его не работает. Возможно, я просто думаю об этом неправильно.

Моя идея - использовать плагин animatedcollapse.js (http://www.dynamicdrive.com/dynamici...edcollapse.htm) для анимирования аккордеона. Аккордеон работает в соответствии с атрибутом «rel», либо «rel = collapse [selected div]», либо «rel = expand [selected div]». Чтобы расширить или свернуть аккордеон. Проблема с тем, как он настроен, заключается в том, что когда один div сворачивает другой, он одновременно расширяется в фоновом режиме.

http://dl.dropbox.com/u/14080718/Final/UITabs10.html

Я пытаюсь сделать так, каждый раз, когда новый нажата ссылка предыдущий баян полностью разрушилась, прежде чем она расширяет новую. Поэтому каждый раз, когда нажимается ссылка, предыдущий div полностью закрывается, прежде чем он открывает новый div.

Я думаю, что rel toggle между "rel = collapse [selected div]" и "rel = expand [selected div]" может решить это, но Im не уверен. Если у вас есть другие идеи, я бы с удовольствием их услышал.

+0

Кнопки не имеют * * а 'rel' атрибут (так как они не имеют' href' атрибут сказать, что ресурс отношения является с). – Quentin

+0

Да, но вам нужно написать свою собственную логику. –

+0

Что вы (неправильно?) Используете 'rel' для? – Matijs

ответ

2

Я только написал плагин JQuery.

Использование: $("selector").toggleAttr("rel", "option1", "option2");

(function($) { 
    $.fn.toggleAttr = function(attribute, option1, option2) { 
     return this.each(function() { 
      var $this = $(this); 
      if ($this.attr(attribute) != option1) { 
       $this.attr(attribute, option1); 
      } else { 
       $this.attr(attribute, option2); 
      } 
     }); 
    } 
})(jQuery); 
+0

http://dl.dropbox.com/u/14080718/Final/UITabs11.html Я не думаю, что правильно использую ваш плагин. Что я делаю не так? Спасибо за помощь! –

+0

Очень распространенная ошибка и неправильное использование моего плагина. Вы выполняете код перед загрузкой документа. Используйте ** '$ (document) .ready (function() {$ (" # button "). ToggleAttr (" rel "," expand [thumb1] "," collapse [thumb1] ")});' **. Смотрите также: http://api.jquery.com/ready/ –

+0

Rob-Code является гениальным! Спасибо за помощь! Есть ли способ отключить функцию, поэтому, когда я нажимаю другую ссылку на странице, rel возвращается к тому, что это было? В принципе, я хочу, чтобы каждый div был полностью закрыт перед открытием другого. Имеет ли это смысл? http://dl.dropbox.com/u/14080718/Final/UITabs11.html –

0
//global flag to check condition 
var flag = true; 

$('#yourelement').click(function(){ 
      if(flag == true){ 
       flag = false; 
       $('#yourotherelement').attr('rel', newValue);   
      }else{ 
       flag = true; 
       $('#yourotherelement').attr('rel', oldValue); 
      } 
}); 
+0

Глобальный флаг? Eugh. Теперь вы сохраняете одну и ту же информацию в двух местах, и один из них предотвращает повторное использование кода. – Quentin

0

Вы, наверное, хотите этого,

$(document).ready(function(){ 
    $(".buttonToggle").click(function(){ 
    var relAttribute = $(".buttonYouWanttotogglerelattr").attr("rel"); 
    //gets current rel 
    if(relAttribute == "value1"){ 
    $(".buttonYouWanttotoggleRelattr").attr("rel","value2"); 
    //if its value1 change it to value2 
    } 
    else 
    { 
    $(".buttonYouWanttotoggleRelattr").attr("rel","value2"); 
    } 
    }); 
}); 
+1

'if (var =" value1 ") {'? ты что ?! – Quentin

+0

А, этот ответ был отредактирован. Итак ... 'if (relAttribute =" value1 ") {'? ты что ?! – Quentin

+1

@Mohammed, вы должны использовать '==' или '===', чтобы проверить, равны ли переменные. В настоящее время вы назначаете '' value1 "' 'relAttribute'. –