2012-03-06 4 views
0

Я довольно новичок в jQuery и сейчас просто играю. Я пытаюсь создать событие click, которое имеет атрибут «disabled» для <select></select> до true/false всякий раз, когда нажимается.jQuery - если else click event

Так что он начинается с отключенного [true], и ​​при нажатии на ссылку он отключается [false] - круто. Но теперь я не хочу, чтобы он возвращался к отключенному [true] с той же ссылкой.

Мой код выглядит следующим образом:

$('.enableSelects').click(function(){ 
    if($('select').is(':hidden')){ 
     $('select').attr('disabled', true); 
    } else { 
     $('select').attr('disabled', false); 
    } 
}); 
+0

Параметр ': селектор hidden' буквально означает, что он скрыт и не отключен. Попробуйте 'if ($ ('select'). Attr ('disabled') == false)' вместо этого. –

+2

короткая версия: http://jsfiddle.net/k3sb8/ – Yoshi

+0

@Yoshi Hey Yoshi. Не могли бы вы дать ответ и немного описать код? – skolind

ответ

3

относительно короткой версии:

$('.enableSelects').click(function(){ 
    $('select').prop('disabled', !$('select').prop('disabled')); 
});​ 

начиная с:

$('select').prop('disabled', !$('select').prop('disabled')); 
//   |    ||__________________________| 
//   |    | | 
//   |    | |_1) this will be evaluated first, resulting 
//   |    |  in either 'true' or 'false' 
//   |    | 
//   |    |____2) the boolean value from above will then 
//   |      be inverted, and this new value will be 
//   |      used as the new value for disabled, 
//   |      which is then assigned 
//   | 
//   |_____________________3) using the 'prop' method 

немного улучшенную версию:

$('.enableSelects').click(function(){ 

    //       |-- 1) this function gets called by jQuery 
    //       |  automatically. The index and the current 
    //       |  value will be passed to it. 
    //       |  The return value will be assigned to the 
    //       |  property. 
    //       | 
    $('select').prop('disabled', function (idx, current) { 

     // we're returning the inverted current value 
     return !current; 

    }); 
});​ 

это в основном то же самое, что и выше, но мы сокращение количество селекторов, которые должны быть оценены.

http://jsfiddle.net/k3sb8/1/

+0

Хм, я не совсем понял.Но я получу это вовремя, когда я немного поиграю с этим :-) – skolind

+0

Кстати, я должен щелкнуть ссылку 2 раза, прежде чем она отреагирует. Как так? – skolind

+0

@Kolind mhm, для меня это первый клик, какой браузер вы используете? – Yoshi

0

Вы можете прочитать на .prop() vs .attr()

Попробуйте использовать prop() вместо attr()

Попробуйте использовать @ скрипку Йоши из комментариев: http://jsfiddle.net/k3sb8/

+0

Работает отлично. :-) – skolind

1

Использовать :disabled вместо :hidden, и предпочитают .prop() более .attr().

Кроме того, ваш текущий метод работает отлично, если в документе есть только один <select>. Измените селектор, когда у вас есть несколько элементов <select>.

+0

Я посмотрю на prop(). Это позволяет сразу выбирать, не так ли? Какой селектор следует использовать для множественного выбора? – skolind

+0

@Kolind Если вы хотите выбрать все '' вам может понадобиться другое решение: ** См. Http://pastebin.com/NwsWvu7R**. Он переключает видимость для ** всех ** отдельных элементов '