#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. Абсолютно. Поскольку на этот вопрос был дан ответ, и я нахожусь на портативном устройстве, ввод текста происходит немного медленнее.