我的网站上有一个Product attribute Checkbox
,它将使用ajax和javascript onchange
事件更新产品列表。
我在Here (jsfiddle)上添加了所有代码。
HTML
<input data-option-ids="1358" id="specification-input-21-1358" type="checkbox">
<label class="filter-item-name" for="specification-input-21-1358">Only Available Product</label>
JavaScript
$('#specification-input-21-1358').change(function() {
//ajax
});
我无法修改此代码,因为它是模块的一部分,该模块可用于我的所有属性checkboxes
,并且是动态创建的并且可以正常工作。
我在页面顶部添加了一个具有不同样式的另一个复选框,我希望它与该复选框一样。我的目的是让客户不要错过可以使用此复选框的功能。(第一个复选框是属性过滤器的一部分)
第二个复选框HTML:
<div class="availButton">
<p dir="rtl" style="text-align: left;">show only available products:</p>
<div class="slideThree">
<input id="slideThree" name="check" type="checkbox">
<label for="slideThree">
</label>
</div>
</div>
将第一个复选框绑定到第二个复选框是我当前的代码:
$('#slideThree').click(function() { < -- - this works fine.
$('#specification-input-21-1358').click();
});
$('#specification-input-21-1358').click(function() {
if ($('#slideThree').length) {
if ($('#slidethree').checked) < -- - problem is here.
$('#slideThree').attr('checked', false);
else
$('#slideThree').attr('checked', true);
}
});
问题是,如果我单击第一个复选框,则第二个复选框不会更改。
另一个问题是,如果我刷新页面第一复选框,则复选框保持选中状态,但第二个复选框将不被选中。
有关我的代码的更多详细信息:
我的代码中有一个Ajax过滤器模块,其中包含一些checkboxes
(与Amazon相同),每个复选框都是我产品的属性。因此,当我检查其中之一时,网站的产品列表将使用ajax更新。
checkboxes
之一是:show only avail Product
,如果我单击它,它将用ajax更新产品列表以仅显示可用产品。
我还在此页面的顶部添加了另一个复选框(具有不同的样式),与该复选框相同。我的目的是让客户不要错过可以使用此复选框的功能。
我希望两个checkboxes
都一样。
因此,如果客户检查其中一个,则必须检查另一个。如果他们取消选中其中一个,则另一个必须取消选中。
答案 0 :(得分:1)
您可以按照以下方式进行操作:
$('#specification-input-21-1358, #slideThree').click(function() {
if ($('#slideThree').length)
$('#specification-input-21-1358, #slideThree').prop('checked', $(this).is(':checked'));
});
答案 1 :(得分:0)
最简单的方法是将class属性添加到两个元素
<input data-option-ids="1358" id="specification-input-21-1358" class="specification-input-21-1358" type="checkbox">
然后您就可以用它执行ajax调用了。
$('.specification-input-21-1358').change(function() {
//ajax
});
答案 2 :(得分:0)
如下更新代码:
$('#slideThree').click(function() {
$('#specification-input-21-1358').click();
});
$('#specification-input-21-1358').click(function() {
if ($('#slideThree').length) {
$('#slideThree').prop('checked', $(this).prop('checked'));
}
});
您可以在下面对其进行测试。
//if product page is refreshing while ajax filter is already clicked it will work inverse (when checked ajax filter is uncheked)
$('#slideThree').click(function() {
$('#specification-input-21-1358').click();
});
$('#specification-input-21-1358').click(function() {
if ($('#slideThree').length) {
$('#slideThree').prop('checked', $(this).prop('checked'));
}
});
// it's ajax filter and will updated product list of website with ajax and i don't want modify this
$('#specification-input-21-1358').change(function() {
var i = n(this),
r = i.closest("div[data-optionsGroupId]"),
u = new t;
u.requestProductsForSelectedFilters(r, i)
});
.availButton p {
display: inline-block;
vertical-align: middle;
padding-top: 5px;
padding-left: 10px;
direction: rtl;
font-family: m2hweb;
color: green;
margin-bottom: 10px;
direction: ltr;
}
.slideThree::before {
content: 'ON';
font: 12px/26px Arial, sans-serif;
font-weight: normal;
color: #00bf00;
position: absolute;
left: 10px;
z-index: 0;
font-weight: bold;
}
.slideThree::after {
content: 'OFF';
font: 12px/26px Arial, sans-serif;
font-weight: normal;
color: #000;
position: absolute;
right: 10px;
z-index: 0;
font-weight: bold;
text-shadow: 1px 1px 0 rgba(255, 255, 255, .15);
}
.slideThree input[type="checkbox"] {
visibility: hidden;
}
.slideThree input[type="checkbox"]:checked+label {
left: 43px;
}
.slideThree label {
display: block;
width: 34px;
height: 20px;
-webkit-border-radius: 50px;
-moz-border-radius: 50px;
border-radius: 50px;
-webkit-transition: all .4s ease;
-moz-transition: all .4s ease;
-o-transition: all .4s ease;
transition: all .4s ease;
cursor: pointer;
position: absolute;
top: 3px;
left: 3px;
z-index: 1;
-webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .3);
-moz-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .3);
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .3);
background: #fcfff4;
background: -webkit-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
background: -moz-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
background: -o-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
background: -ms-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
background: linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fcfff4', endColorstr='#b3bead', GradientType=0);
}
.slideThree {
width: 80px;
height: 26px;
background: #333;
margin: 0 auto;
display: inline-block;
-webkit-border-radius: 50px;
-moz-border-radius: 50px;
border-radius: 50px;
position: relative;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .5), 0 1px 0 rgba(255, 255, 255, .2);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .5), 0 1px 0 rgba(255, 255, 255, .2);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .5), 0 1px 0 rgba(255, 255, 255, .2);
}
.slideThree::after {
content: 'OFF';
font: 12px/26px Arial, sans-serif;
font-weight: normal;
color: #000;
position: absolute;
right: 10px;
z-index: 0;
font-weight: bold;
text-shadow: 1px 1px 0 rgba(255, 255, 255, .15);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="availButton">
<p dir="rtl" style="text-align: left;">Show Only Available product :</p>
<div class="slideThree"><input id="slideThree" name="check" type="checkbox"> <label for="slideThree"></label></div>
</div>
<ul class="checkbox-list">
<li class="checkbox-item checkbox">
<input data-option-ids="1358" id="specification-input-21-1358" type="checkbox">
<label class="filter-item-name" for="specification-input-21-1358" data-originaltext="Available Product">Available Product</label>
</li>
</ul>