2013-12-22 6 views
0

Я уверен, что есть много способов сделать это, но я бы хотел найти самый простой способ, предпочтительно на основе CSS.Текстовое поле отключает радиокнопки

У меня простая форма с четырьмя переключателями, а затем текстовое поле. Мне нужно отключить переключатели, если пользователь нажимает текстовое поле. Это мой основной код, и само собой разумеющееся, я все еще учусь о формах, так что могут быть и другие ошибки:

<div class="left-column"> 
<input type="radio" class="radio" name="location" value="address-1" id="address-1" checked="checked" /> 
<label for="address-1">First location</label> 
<input type="radio" class="radio" name="location" value="address-2" id="address-2" /> 
<label for="address-2">Second location</label> 
</div> 

<div class="right-column"> 
<input type="radio" class="radio" name="location" value="address-3" id="address-3" /> 
<label for="address-3">Third location</label> 
<input type="radio" class="radio" name="location" value="address-4" id="address-4" /> 
<label for="address-4">Fourth location</label> 
</div> 

<div> 
<textarea id="location" type="text" tabindex="1" name="location" cols="22" rows="1"> </textarea> 
</div> 
+0

Вам нужно использовать JS для этого не CSS. –

+1

Вы не можете отключить элементы формы только с помощью CSS. –

ответ

0

С JQuery, вы можете сделать что-то вроде этого (который отключает радиокнопок с классом radio когда пользователь нажимает в текстовом поле):

$("#location").click(function(){ 
    $(".radio").prop("disabled", true); 
}); 

Теперь, если вам нужно включить радио-кнопку, если пользователь нажмет снаружи (или по-другому оставляет текстовое поле) текстовое поле, можно просто изменить click в код выше до blur, например:

$("#location").blur(function(){ 
    $(".radio").prop("disabled", false); 
}); 
+0

Я пробовал это, и я отмечаю, что когда скрипт находится на месте, кнопка по умолчанию, отмеченная по умолчанию, не отключается, а другие не делают, если они отмечены галочкой, когда пользователь помещает свой курсор в поле textinput. Поэтому я не уверен, работает ли javascript. Я также должен спросить, означает ли вариант «размытия» заменить версию «щелчок» или если вы имели в виду это в дополнение к. – user604488

+0

Добавлена ​​версия 'blur', если вы хотите, чтобы вы снова сбросили переключатели на значение по умолчанию (включено), если пользователь нажимает за пределами текстового поля. Взгляните на этот jsfiddle (http://jsfiddle.net/38k3z/), чтобы понять, что я имею в виду. –

+0

Причина, по которой ваш скрипт не работает, может заключаться в том, что у меня также есть скрипт водяного знака js, который работает в этом поле. Возможно, эти два не любят друг друга: 'code' \t jQuery (функция ($) { \t $ (" # location "). Водяной знак (« Другое место »); }); – user604488

0

В JavaScript, следующий будет работать:

window.onload = function() 
{ 
    document.getElementById('location').addEventListener('click', function() 
    { 
     for(var i = 0; i < 4; i ++) 
     { 
     document.getElementsByClassName('radio')[i].disabled = true; 
     } 
    }); 
} 

Потому что ваш radio buttons находятся в классе, и есть четыре из них.

Чтобы повторно включить все из них, установите disabled ложь:

document.getElementById('location').addEventListener('click', function() 
     { 
      for(var i = 0; i < 4; i ++) 
      { 
      document.getElementsByClassName('radio')[i].disabled = false; 
      } 
     }); 

CSS не кабель этого, хотя, потому что это только Style Sheet Language.

+0

Теперь это работает очень хорошо! может быть сделано, однако, для сброса состояния, если кто-то передумает в текстовом поле и хочет вместо этого нажать переключатель? – user604488

+0

Установите disabled = false, посмотрите на редактирование. Поместите этот код на свои кнопки переключателей «переключатели» на повторно использовать их: 'for (var i = 0; i <4; i ++) { document.getElementsByClassName ('radio') [i] .addEventListener ('click', function() {for (var i = 0; i <4; i ++) {document.getElementsByClassName ('radio'). Disabled = false;}} } 'Также, пожалуйста, отметьте мой ответ как« правильный ». ** – Cilan

+0

Ваш метод выиграл ' t на IE8 и ниже. –

Смежные вопросы