Jquery 显示不适用于具有特定 class 的元素
Jquery show not working only on elements with a certain class
我有一个奇怪的问题,其中 jquery .show() 不只对某些元素起作用。
我有这个复选框:
<input type="checkbox" class="classcheck" value="1" id="id1">
<input type="checkbox" class="classcheck" value="2" id="id2">
用于根据我的选择显示不同的项目。
这是执行此操作的代码:
$(document).on('change','.classcheck',function()
{
$('.classcheck').each(function() {
if($(this).is(':checked'))
{
switch($(this).val())
{
case '1':
$('.class1').show();
break;
case '2':
$('.class2').show();
break;
}
}
else
{
switch($(this).val())
{
case '1':
$('.class1').hide();
break;
case '2':
$('.class2').hide();
break;
}
}
});
});
还有一个示例元素:
<div class="item form-group class1">
<label class="control-label col-md-4 col-sm-4 col-xs-12">This is an
element: </label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="el1" name="el1" class="form-control col-md-7 col-xs-12" style="width:40%" >
</div>
</div>
页面加载后所有元素都设置为隐藏。
基本上只显示了一些带有 class1 的元素,但大多数元素保持隐藏状态,而且这似乎只发生在带有 class.
的元素上
还有一些元素可能有两个 class,例如:
class="class1 class2"
希望对你有帮助
<script>
$('.classcheck').on('click', function() {
$('.classcheck').each(function() {
if($(this).is(':checked'))
{
switch($(this).val())
{
case '1':
$('.class1').show();
break;
case '2':
$('.class2').show();
break;
}
}
else
{
switch($(this).val())
{
case '1':
$('.class1').hide();
break;
case '2':
$('.class2').hide();
break;
}
}
});
})
</script>
Solution :
- You need to use checkbox change event
- use
$(this).prop('checked')
to find checkbox is checked or not
$(document).ready(function(){
$('.classcheck').each(function () {
$(this).change(function () {
if ($(this).prop('checked')) {
switch ($(this).val()) {
case '1':
$('.class1').show();
break;
case '2':
$('.class2').show();
break;
}
}
else {
switch ($(this).val()) {
case '1':
$('.class1').hide();
break;
case '2':
$('.class2').hide();
break;
}
}
});//end change event
});//end each loop
});//jq
.class1,.class2{display:none}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" class="classcheck" value="1" id="id1"> Checkebox 1
<input type="checkbox" class="classcheck" value="2" id="id2"> Checkebox 2
<div class="item form-group class1">
<label class="control-label col-md-4 col-sm-4 col-xs-12">
This is an element 1 :
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="el1" name="el1" class="form-control col-md-7 col-xs-12" style="width:40%">
</div>
</div>
<div class="item form-group class2">
<label class="control-label col-md-4 col-sm-4 col-xs-12">
This is an element 2 :
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="el1" name="el1" class="form-control col-md-7 col-xs-12" style="width:40%">
</div>
</div>
将您的事件更改为如下所示,您不需要文档更改事件中的每个函数。
$(document).on('change', '.classcheck', function (ev) {
var clickedBox = ev.currentTarget;
if ($(clickedBox).is(':checked')) {
switch ($(clickedBox).val()) {
case '1':
$('.class1').show();
break;
case '2':
$('.class2').show();
break;
}
}
else {
switch ($(clickedBox).val()) {
case '1':
$('.class1').hide();
break;
case '2':
$('.class2').hide();
break;
}
}
});
我有一个奇怪的问题,其中 jquery .show() 不只对某些元素起作用。
我有这个复选框:
<input type="checkbox" class="classcheck" value="1" id="id1">
<input type="checkbox" class="classcheck" value="2" id="id2">
用于根据我的选择显示不同的项目。
这是执行此操作的代码:
$(document).on('change','.classcheck',function()
{
$('.classcheck').each(function() {
if($(this).is(':checked'))
{
switch($(this).val())
{
case '1':
$('.class1').show();
break;
case '2':
$('.class2').show();
break;
}
}
else
{
switch($(this).val())
{
case '1':
$('.class1').hide();
break;
case '2':
$('.class2').hide();
break;
}
}
});
});
还有一个示例元素:
<div class="item form-group class1">
<label class="control-label col-md-4 col-sm-4 col-xs-12">This is an
element: </label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="el1" name="el1" class="form-control col-md-7 col-xs-12" style="width:40%" >
</div>
</div>
页面加载后所有元素都设置为隐藏。
基本上只显示了一些带有 class1 的元素,但大多数元素保持隐藏状态,而且这似乎只发生在带有 class.
的元素上还有一些元素可能有两个 class,例如:
class="class1 class2"
希望对你有帮助
<script>
$('.classcheck').on('click', function() {
$('.classcheck').each(function() {
if($(this).is(':checked'))
{
switch($(this).val())
{
case '1':
$('.class1').show();
break;
case '2':
$('.class2').show();
break;
}
}
else
{
switch($(this).val())
{
case '1':
$('.class1').hide();
break;
case '2':
$('.class2').hide();
break;
}
}
});
})
</script>
Solution :
- You need to use checkbox change event
- use
$(this).prop('checked')
to find checkbox is checked or not
$(document).ready(function(){
$('.classcheck').each(function () {
$(this).change(function () {
if ($(this).prop('checked')) {
switch ($(this).val()) {
case '1':
$('.class1').show();
break;
case '2':
$('.class2').show();
break;
}
}
else {
switch ($(this).val()) {
case '1':
$('.class1').hide();
break;
case '2':
$('.class2').hide();
break;
}
}
});//end change event
});//end each loop
});//jq
.class1,.class2{display:none}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" class="classcheck" value="1" id="id1"> Checkebox 1
<input type="checkbox" class="classcheck" value="2" id="id2"> Checkebox 2
<div class="item form-group class1">
<label class="control-label col-md-4 col-sm-4 col-xs-12">
This is an element 1 :
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="el1" name="el1" class="form-control col-md-7 col-xs-12" style="width:40%">
</div>
</div>
<div class="item form-group class2">
<label class="control-label col-md-4 col-sm-4 col-xs-12">
This is an element 2 :
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="el1" name="el1" class="form-control col-md-7 col-xs-12" style="width:40%">
</div>
</div>
将您的事件更改为如下所示,您不需要文档更改事件中的每个函数。
$(document).on('change', '.classcheck', function (ev) {
var clickedBox = ev.currentTarget;
if ($(clickedBox).is(':checked')) {
switch ($(clickedBox).val()) {
case '1':
$('.class1').show();
break;
case '2':
$('.class2').show();
break;
}
}
else {
switch ($(clickedBox).val()) {
case '1':
$('.class1').hide();
break;
case '2':
$('.class2').hide();
break;
}
}
});