【发布时间】:2017-08-03 07:43:09
【问题描述】:
整个想法是通过下拉限制复选框的数量,方法是: 我有以下代码的下拉菜单
<select name="form[norequnit][]" id="norequnit" class="rsform-select-box">
<option value="">...</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
<input name="chk" type="checkbox" class="bd-lable" value="9432"><label>01</label>
<input name="chk" type="checkbox" class="bd-lable" value="9432"><label>02</label>
<input name="chk" type="checkbox" class="bd-lable" value="9432"><label>03</label>
<input name="chk" type="checkbox" class="bd-lable" value="9432"><label>04</label>
<input name="chk" type="checkbox" class="bd-lable" value="9432"><label>05</label>
<input name="chk" type="checkbox" class="bd-lable" value="9432"><label>06</label>
并且一些由 ajax 和下面的代码加载的复选框正在运行以获取下拉值,并且在 ajax 部分之后根据选定的下拉列表限制选择的数量,
<script type="text/javascript">
jQuery(document).ready(function($) {
$("#norequnit").on("change", function () {
$('#unitcount').html($(this).find('option:selected').text());
});
$( document ).ajaxComplete(function() {
$( ".log" ).text( "Triggered ajaxComplete handler." );
var nux = $('#unitcount').text();
$("input[name=chk]").change(function(){
var max= nux;
if( $("input[name=chk]:checked").length == max )
{
$("input[name=chk]").attr('disabled', 'disabled');
$("input[name=chk]:checked").removeAttr('disabled');
}
else{
$("input[name=chk]").removeAttr('disabled');
}
})
});
});
</script>
问题:
variable "nux" 仅在第一次尝试时通过选择下拉列表获取值,例如 5,因此您可以将框限制为 5 个检查,但在此之后,如果您将下拉列表更改为任何其他数字,请选中复选框限制仍然是 5,换句话说“nux”不会得到新的变量。
【问题讨论】:
-
为什么 nux 会改变?您没有任何类型的更改事件处理程序来捕获该事件并相应地更新它。否则,使 nux 成为选择对象本身,而不是它的值,并且任何时候您需要该值只需执行 nux.text() 或 nux.val() ,无论如何,它将反映它在那个时间点是什么.
-
nux 在第一次下拉更改时从 unitcount 中获取价值,并且它工作正常。但之后通过更改下拉单元计数正在更改但 nux 它没有更新。
-
对,我在第一条评论中说明了原因。 Javascript 本身并没有两种方式将 javascript 变量与 dom 元素绑定。您必须自己管理该状态反射,或者引用 dom 元素,该元素将始终与自身保持同步。
-
你能更新代码吗?谢谢
-
我的陈述让您感到困惑吗?而不是
var nux = $('#unitcount').text();,它只是var nux = $('#unitcount');,然后在你下面的比较中它变为max.text()