Как изменить CSS с помощью jQuery change и этого

#jquery #css #this #onchange

#jquery #css #это #onchange

Вопрос:

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

CSS:

 .opts {float: left; padding-left: 5px;}
  

HTML:

 <div class="opts"><label><input class="ws" type="radio" name="ptype" value="1">A</label></div>
<div class="opts"><label><input class="ws" type="radio" name="ptype" value="2">B</label></div>
<div class="opts"><label><input class="ws" type="radio" name="ptype" value="3">C</label></div>
  

jQuery

 $(document).ready(function(){
  $('.ws').change(function(){
    var c = this.checked ? '#ff0000' : '#0099ff';
    this.css('color', c);
  });
}); 
  

Я могу заменить «this.css» на $(‘.opts’), но тогда, конечно, весь текст изменит цвет. Моя проблема в том, что я не могу заставить «это» работать. Любая помощь?

Комментарии:

1. Измените this на $(this)

2. пробовал, но не сработало, я должен был упомянуть об этом…

3. Методы Jquery не могут быть применены к элементу DOM.

Ответ №1:

Вам нужно изменить цвет ближайшего .opts , как показано ниже.

 $('.ws').change(function() {
    $('.opts').css('color', '#0099ff'); 
    $(this).closest('.opts').css('color', '#ff0000');
});  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="opts"><label><input class="ws" type="radio" name="ptype" value="1">A</label></div>
<div class="opts"><label><input class="ws" type="radio" name="ptype" value="2">B</label></div>
<div class="opts"><label><input class="ws" type="radio" name="ptype" value="3">C</label></div>  

Ответ №2:

Что вам нужно, так это объект jquery. Что такое $(this) и вам нужно перейти к ближайшему методу:

  $(this).closest('.opts').css('color', c);
  

Комментарии:

1. Проблема с вашим ответом заключается в том, что текст становится красным рядом с выбранным переключателем, но он не переключает его обратно на синий, когда я нажимаю другой переключатель. У @Azim выше есть рабочее решение.

2. Абсолютно. Поскольку на этот вопрос был дан ответ, и я нахожусь на портативном устройстве, ввод текста происходит немного медленнее.