如何链接单选按钮和填充的文本输入,因此当选择单选时,输入文本区域中的文本也将更改为红色粗体?
我知道逻辑是:
选中radio-A和input-text-A时,将CSS类添加到input-text-A。
取消选中时,删除类。如果选择了radio-B,请更改输入文本-B,依此类推...
但是现在,简单脚本将所有文本输入作为目标。
$('input[type=text]').addClass('red');
.red {
color: red;
font-weight: bold;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="form-inline">
<label class="" for="">
<input class="" type="radio" name="answer-Q1" value="option1"> A. </label>
<input type="text" name="answers" class="" placeholder="" required>
</div>
<br>
<div class="form-inline">
<label class="">
<input class="" type="radio" name="answer-Q2" value="option1"> B. </label>
<input type="text" name="answers" class="" placeholder="" required>
</div>
答案 0 :(得分:3)
给出您的标记,实际上不需要添加任何类或使用javascript,您可以使用纯CSS做您想做的事情:
input[type="radio"]:checked + input[type="text"] {
color: red;
font-weight: bold;
}
关于如何使用jQuery添加类,我倾向于编写“健壮”的解决方案,这些解决方案可能会更长一些,但是却不那么“脆弱”(意味着:如果标记发生了一些变化,脚本仍然可以工作) 。我写这个的方式-假设没有对标记的控制-将使用jQuery的closest和find来定位目标文本输入:
// no-conflict-save document ready shorthand
jQuery(function($) {
// bind to the "change" event of all inputs that are radio buttons
jQuery('input[type="radio"]').on('change', function() {
// find the text input
var $text_input = $(this).closest('div').find('input[type="text"]');
// if there isn't one, get out
if ( ! $text_input.length ) {
return;
}
// if the radio button is checked, add the class
if ($(this).is(':checked')) {
$text_input.addClass('red');
} else {
// otherwise, remove the class
$text_input.removeClass('red');
}
});
});
但是,如果我DID可以控制标记,则可以向无线电输入元素添加一个类,并使用该类使脚本更“一般”地有用,并缩小正在输入的范围绑定(这将使同一脚本也可以在复选框+文本输入上有效地工作):
// no-conflict-save document ready shorthand
jQuery(function($) {
// bind to the "change" event of any inputs with the "watch-change" class
jQuery('input.watch-change]').on('change', function() {
// find the text input. Note, this would find multiple text inputs if they existed.
var $text_input = $(this).closest('div').find('input[type="text"]');
// if there isn't a text input to work with, get out
if ( ! $text_input.length ) {
return;
}
// if the radio button is checked, add the class
if ($(this).is(':checked')) {
$text_input.addClass('red');
} else {
// otherwise, remove the class
$text_input.removeClass('red');
}
});
});
老实说,通过更好地了解您的项目范围,可能可以编写甚至更有效,可重复使用的脚本片段。
答案 1 :(得分:0)
执行以下操作:
$("input[type=radio]").on("change", function(e) {
if (e.currentTarget) {
e.currentTarget.next("input[type=text").addClass("red");
}
});
答案 2 :(得分:0)
这是工作代码。
$('input:radio').click(function() {
$('label:has(input:radio:checked)').addClass('rightAnswer');
$('label:has(input:radio:not(:checked))').removeClass('rightAnswer');
});
.container {margin:0 auto; margin-top:50px;}
.rightAnswer {font-weight:bold; color:#2979FF;}
.inputAnswers {width:200px;}
.block {display:block;}
input[type="radio"]:checked + input[type="text"] {
color: #2979FF;
font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<label class="block" for="answer-Q1A">
<input type="radio" class="" name="answer-Q1" value="1"> A.
<input type="text" name="answers" class="inputAnswers" id="answer-Q1A" placeholder="" required></label>
<label class="block" for="answer-Q1A">
<input type="radio" class="" name="answer-Q1" value="1"> B.
<input type="text" name="answers" class="inputAnswers" id="answer-Q1A" placeholder="" required></label>
<label class="block" for="answer-Q1A">
<input type="radio" class="" name="answer-Q1" value="1"> C.
<input type="text" name="answers" class="inputAnswers" id="answer-Q2A" placeholder="" required></label>
</div>