Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 取消js复选框单击函数问题_Javascript_Knockout.js - Fatal编程技术网

Javascript 取消js复选框单击函数问题

Javascript 取消js复选框单击函数问题,javascript,knockout.js,Javascript,Knockout.js,我在我的页面中使用了knockoutjs,其中我有三个复选框。我使用了checkbox的click事件,并编写了一个方法,该方法将在checkbox单击时触发。工作正常 问题是,当页面被加载时,函数本身正在调用 这里是html <div class="form-horizontal" id="ko-bind-element"> <input type="hidden" id="serverJSON" value="@Newtonsoft.Json.Jso

我在我的页面中使用了knockoutjs,其中我有三个复选框。我使用了checkbox的click事件,并编写了一个方法,该方法将在checkbox单击时触发。工作正常

问题是,当页面被加载时,函数本身正在调用

这里是html

<div class="form-horizontal" id="ko-bind-element">
            <input type="hidden" id="serverJSON" value="@Newtonsoft.Json.JsonConvert.SerializeObject(Model)" />
            <div data-bind="foreach: procedures">
                <div data-bind="template: { name: Mode(), data: $data }"></div>
            </div>
        </div>
<script type="text/html" id="procedure">
            <table class="table table-bordered" >
                <tr>

                    <td class="col-md-3"><span data-bind="text: Name"></span></td>
                    <td><input type="checkbox" data-bind="attr: { name: (VId.length > 0) ? VId : Name },checked: AlreadyCompleted,click:$root.Test(UID,1)" /></td>
                    <td><input type="checkbox" data-bind="attr: { name: (VId.length > 0) ? VId : Name },checked: NotApplicable,click:$root.Test(UID,2)" /></td>
                    <td><input type="checkbox" data-bind="attr: { name: (VId.length > 0) ? VId : Name },checked: CreateNew,click:$root.Test(UID,3)" /></td>


                </tr>
                <tr>
                    <td colspan="4" style="padding:0;">

                        <div data-bind="if: CreateNew">
                            <textarea style="margin-top:10px; margin-bottom:10px;" class="col-md-offset-3 col-md-8" data-bind=" value : Text"></textarea>
                            <div class="clearfix"></div>
                        </div>
                    </td>
                </tr>
            </table>

        </script>
现在的问题是测试方法在页面加载时被自己调用。只有在复选框单击的情况下,才会触发它。

请尝试以下操作:

$('.checkbox').change(function(){
    if (this.checked === true) {
        addEmpty();
    }
});

还要将class=checkbox添加到复选框中以启用OnChangeHandler。

因为您调用了函数,所以您将单击与您必须编写的函数的返回绑定如下:单击:=>$root.TestUID,1

这是因为您正在将参数传递给knockout click事件,事实上,knockout将在加载时调用函数,因为您正在使用函数来传递参数

解决方案1:您可以将click函数包装在JS函数中,如:

data-bind="click: function(){ $root.Test(UID,1) }"
解决方案2:可以使用绑定上下文

data-bind="click: $root.Test.bind(UID,1)"

这与目前的情况无关。很抱歉,我误解了这个问题,因此我帮不了什么忙
data-bind="click: $root.Test.bind(UID,1)"