[英]JQuery is(':checked') not working as intended on form
编辑:
问题 1 和 2 已解决。 问题 3是唯一一个突出的问题。
更新的演示:
jQuery(function($) { function addremovebtnshow() { if ($(".attendee").length == 1) { $('.remove').hide(); } else { $('.remove').show(); } } $('input[name="attendee"]').hide(); $('.more_buttons').hide(); addremovebtnshow(); //show it when the checkbox is clicked $(document).on("click", '.check', function() { if ($(".check:checked").length > 0) { $('input[name="attendee"]').fadeIn(); $('.more_buttons').fadeIn(); addremovebtnshow(); } else { $('input[name="attendee"]').hide(); $('.more_buttons').fadeOut(); addremovebtnshow(); } }); $('.add').on('click', add); $('.remove').on('click', remove); function add() { var new_chq_no = parseInt($('#total_chq').val()) + 1; var new_input = "<input type='text' placeholder='Attendee name' id='new_" + new_chq_no + "'>"; $('#new_chq').append(new_input); $('#total_chq').val(new_chq_no); } function remove() { var last_chq_no = $('#total_chq').val(); if (last_chq_no > 1) { $('#new_' + last_chq_no).remove(); $('#total_chq').val(last_chq_no - 1); } } });
form{ display: flex; flex-direction: column; justify-content: center; max-width: 400px; margin: 0 auto; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form> <input type="checkbox" id="event1" class="check" name="event1" value="Event 1"> <label for="event1">Event 1</label> <input type="checkbox" id="event2" class="check" name="event2" value="Event 2"> <label for="event2">Event 2</label> <div id="new_chq"></div> <!-- this one is default and cannot be removed--> <input type="text" name="attendee" placeholder="Attendee name"> <input type="hidden" value="1" id="total_chq"> <div class="more_buttons"> <button class="add" type="button">+</button> <button class="remove" type="button">-</button> </div> </form>
这是我要实现的目标的支持图像:
我正在构建一个表单,如果某些值为真或假,则会出现额外的input
。
目前我有3个问题:
1. 即使is(':checked')
为真,Div 也不会淡入
当我的 id 为#event2
fadeIn()
复选框为真(选中)时,我正在寻找另一个包含单选按钮的div
。 从我读到的其他堆栈溢出问题( 即这个问题)中,它提到is(':checked')
是您如何确定是否选中复选框,然后执行操作。 所以知道这一点,我有以下几点:
$('.coaches').hide();
if ($('#event2').is(':checked')) {
console.log('clicked');
$('.coaches').fadeIn();
}
但是什么也没发生,甚至console.log()
2. 如果选中任何一个复选框,我想显示文本字段和按钮。 但是当我单击一个复选框时,它会消失
所以,我让这个部分工作。 在下面的演示中,当您选中一个复选框时,它会显示文本字段和按钮。 这是我的场景:
Event 1
,字段显示。Event 2
,字段显示。Event 1
,然后单击事件Event 2
,显示字段。Events 1
,然后单击事件Events 2
,然后取消选中Events 1
,字段消失。Events 1
,然后单击事件Events 2
,然后取消选中Events 2
,字段消失。当检查任一复选框时,我希望保留Textfield和按钮。 然后,如果没有选中复选框,则隐藏它们。
3. 当有多个input[name="attendee"]
时,添加<button class="remove action-button" type="button">-</button>
。 目前我的count
方法不起作用,我认为这是因为我的“计数”没有动态上升。
var element = $('input[name="attendee"]'); var count = 0 $(".add").on("click", function(event) { count++; }); console.log(count); if (count > 1) { $('.remove').fadeIn(); } else { $('.remove').hide(); }
完整演示:
jQuery(function($) { // below im trying to show the coaches div only if #event2 is true (checked). $('.coaches').hide(); // hide it first // if checked, show it if ($('#event2').is(':checked')) { console.log('clicked'); $('.coaches').fadeIn(); } // now im trying to show the textfield and add or remove buttons if either of the checkboxes are checked. $('input[name="attendee"]').hide(); $('.add').hide(); $('.remove').hide(); $('#event1, #event2').on('click', function() { if ($(this).is(':checked')) { $('input[name="attendee"]').fadeIn(); $('.add, .remove').fadeIn(); } else { $('input[name="attendee"]').hide(); $('.add, .remove').hide(); } }); // ADD more textfields on plus click, remove text on minus $('.add').on('click', add); $('.remove').on('click', remove); function add() { var new_chq_no = parseInt($('#total_chq').val()) + 1; var new_input = "<input type='text' placeholder='Attendee name' id='new_" + new_chq_no + "'>"; $('#new_chq').append(new_input); $('#total_chq').val(new_chq_no); } function remove() { var last_chq_no = $('#total_chq').val(); if (last_chq_no > 1) { $('#new_' + last_chq_no).remove(); $('#total_chq').val(last_chq_no - 1); } } });
form{ display: flex; flex-direction: column; justify-content: center; max-width: 400px; margin: 0 auto; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form> <input type="checkbox" id="event1" name="event1" value="Event 1"> <label for="event1">Event 1</label> <input type="checkbox" id="event2" name="event2" value="Event 2"> <label for="event2">Event 2</label> <div id="new_chq"></div> <input type="text" name="attendee" placeholder="Attendee name"> <input type="hidden" value="1" id="total_chq"> <button class="add" type="button">+</button> <button class="remove" type="button">-</button> <div class="coaches"> <label> <input type="radio" id="travel_yes" name="travel" value="Yes"> <span>Yes</span> </label> <label> <input type="radio" id="travel_no" name="travel" value="No"> <span>No</span> </label> </div> </form>
此代码可能会解决前两个问题。 我不确定第三个问题,因为我无法正确理解问题。请注意,前两个问题包含代码。
HTML:
<form>
<input type="checkbox" class="check" id="event1" name="event1" value="Event 1">
<label for="event1">Event 1</label>
<input type="checkbox" class="check" id="event2" name="event2" value="Event 2">
<label for="event2">Event 2</label>
<div id="new_chq"></div>
<input type="text" name="attendee" placeholder="Attendee name">
<input type="hidden" value="1" id="total_chq">
<button class="add" type="button">+</button>
<button class="remove" type="button">-</button>
<div class="coaches">
<label>
<input type="radio" id="travel_yes" name="travel" value="Yes">
<span>Yes</span>
</label>
<label>
<input type="radio" id="travel_no" name="travel" value="No">
<span>No</span>
</label>
</div>
</form>
Jquery:
jQuery(function($) {
// below im trying to show the coaches div only if #event2 is true (checked).
$('.coaches').hide(); // hide it first
// if checked, show it
$(document).on("click",'#event2',function(){
if ($(this).is(':checked')) {
console.log('clicked');
$('.coaches').show();
$('.coaches').fadeIn();
}else {
$('.coaches').fadeOut();
$('.coaches').hide();
}
});
// now im trying to show the textfield and add or remove buttons if either of the checkboxes are checked.
$('input[name="attendee"]').hide();
$('.add').hide();
$('.remove').hide();
$(document).on("click",'.check',function(){
if ($(".check:checked").length>0) {
console.log('clicked');
$('input[name="attendee"]').fadeIn();
$('.add, .remove').fadeIn();
}else {
$('input[name="attendee"]').hide();
$('.add, .remove').hide();
}
});
});
更新代码:
HTML:
<form>
<input type="checkbox" class="check" id="event1" name="event1" value="Event 1">
<label for="event1">Event 1</label>
<input type="checkbox" class="check" id="event2" name="event2" value="Event 2">
<label for="event2">Event 2</label>
<div id="new_chq">
<input type="text" name="attendee" placeholder="Attendee name" class="attendee">
<input type="hidden" value="1" id="total_chq">
</div>
<div id="buttons">
<button class="add" type="button">+</button>
<button class="remove" type="button">-</button>
</div>
<div class="coaches">
<label>
<input type="radio" id="travel_yes" name="travel" value="Yes">
<span>Yes</span>
</label>
<label>
<input type="radio" id="travel_no" name="travel" value="No">
<span>No</span>
</label>
</div>
</form>
JQuery:
jQuery(function($) {
// below im trying to show the coaches div only if #event2 is true (checked).
$('.coaches').hide(); // hide it first
// if checked, show it
$(document).on("click",'#event2',function(){
if ($(this).is(':checked')) {
console.log('clicked');
$('.coaches').show();
$('.coaches').fadeIn();
}else {
$('.coaches').fadeOut();
$('.coaches').hide();
}
});
// now im trying to show the textfield and add or remove buttons if either of the checkboxes are checked.
function addremovebtnshow(){
if($(".attendee").length == 1 ) {
$('.remove').hide();
}else {
$('.remove').show();
}
}
$('input[name="attendee"]').hide();
/* $('.add').hide();
$('.remove').hide(); */
$('#buttons').hide();
addremovebtnshow();
$(document).on("click",'.check',function(){
if ($(".check:checked").length>0) {
console.log('clicked');
$('input[name="attendee"]').fadeIn();
$('#buttons').fadeIn();
addremovebtnshow();
}else {
$('input[name="attendee"]').hide();
$('#buttons').fadeOut();
addremovebtnshow();
}
});
// ADD more textfields on plus click, remove text on minus
$('.add').on('click', add);
$('.remove').on('click', remove);
function add() {
var new_chq_no = parseInt($('#total_chq').val()) + 1;
var new_input = "<input type='text' placeholder='Attendee name' class='attendee' id='new_" + new_chq_no + "'>";
$('#new_chq').append(new_input);
addremovebtnshow();
$('#total_chq').val(new_chq_no);
}
function remove() {
var last_chq_no = $('#total_chq').val();
if (last_chq_no > 1) {
$('#new_' + last_chq_no).remove();
addremovebtnshow();
$('#total_chq').val(last_chq_no - 1);
}
}
});
我为你做了一支笔:
你可以在这里看到它。
var countOfInputs = 0;
function add() {
var new_input = "<input type='text' class='form-control' placeholder='Attendee name' id='new_" + countOfInputs + "'>";
countOfInputs++;
$('#new_chq').append(new_input);
}
function remove() {
if (countOfInputs > 1) {
$('#new_' + countOfInputs).remove();
countOfInputs--;
}
}
function toggleAttendees() {
// doesnt matter if you add event at same time you need to check if 1 or 2 checked
if ($('#event1').is(':checked') || $('#event2').is(':checked')) {
$('input[name="attendee"]').fadeIn();
$('.add, .remove').fadeIn();
}
else {
$('.add, .remove, input[name="attendee"]').hide();
}
}
document.addEventListener('DOMContentLoaded', function() {
$('.coaches').hide();
$('input[name="attendee"]').hide();
$('.add').hide();
$('.remove').hide();
if ($('#event2').is(':checked')) {
console.log("event2 is already checked!")
$('.coaches').fadeIn();
toggleAttendees();
}
$('#event1, #event2').on('click', toggleAttendees);
$('.add').on('click', add);
$('.remove').on('click', remove);
add();
});
如果你不想拥有全局变量,你总是可以在DOMContentLoaded
function 中获取函数和计数器:=)
我已经对其进行了一些更改 bdw :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.