在我的页面上,我收到了复选框。如果已经检查,那么我们设置输入字段启用,否则它们被禁用。因此,当我第一次加载页面时,它可以正常工作。但它刚冻结之后。在Chrome控制台中,似乎没有任何内容。
为什么会这样?
所以继承元素
<label class="switch span2">
<input id="p_switcher" name="action" type="checkbox" class="switch-input"/>
<span class="switch-label" data-on="New Project" data-off="Open Project"></span>
<span class="switch-handle"></span>
</label>
fileds看起来像那样(例如)
<input type="text" name="ProjectName" placeholder="Project Name" id="textProjectName" disabled/>
继承人JS
<script type="text/javascript">
$(function () {
// disable not usable fileds
var handlers = function () {
$('input#p_switcher').change(function () {
//setting the atributes
var setAttr = function (fieldName, value) {
$('[name=' + fieldName + ']').attr('disabled', value);
w2ui.form.fields.filter(function (x) { return x.name == fieldName; })[0].required = !value;
}
if ($('input#p_switcher').prop("checked", true)) {
// setAttr('projectId', true);
setAttr('ProjectName', false);
setAttr('CompanyName', false);
setAttr('FieldOperator', false);
setAttr('FieldName', false);
setAttr('Unit', false);
} else {
// setAttr('projectId', false);
setAttr('ProjectName', true);
setAttr('CompanyName', true);
setAttr('FieldOperator', true);
setAttr('FieldName', true);
setAttr('Unit', true);
}
w2ui.form.refresh();
handlers();
});
}
setTimeout(handlers, 500);
});
</script>
答案 0 :(得分:2)
if ($('input#p_switcher').prop("checked", true)) {
在这一行上,你实际上是在再次触发.change
事件。
我认为你的意思是:
if($('input#p_switcher').prop("checked")) {
....
}
答案 1 :(得分:2)
我想这就是它......你在处理程序中调用处理程序,没有超时...
$(function () {
// disable not usable fileds
/*
* shortened
*/
//recursion, no timeout
handlers();
});
}
setTimeout(handlers, 500);
});