js函数调用一次后页面冻结

时间:2014-04-15 10:21:12

标签: javascript jquery html

在我的页面上,我收到了复选框。如果已经检查,那么我们设置输入字段启用,否则它们被禁用。因此,当我第一次加载页面时,它可以正常工作。但它刚冻结之后。在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>

2 个答案:

答案 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);   
   });