C# “从asp.net调用JavaScript函数”复选框

C# “从asp.net调用JavaScript函数”复选框,c#,javascript,jquery,asp.net,checkbox,C#,Javascript,Jquery,Asp.net,Checkbox,我有一个jQuery函数,如下所示,我希望在单击复选框时调用它。当我使用input type=“checkbox”时,它工作正常。但是我想在c#code(fillform())中选中/取消选中复选框,并基于此,JavaScript函数也必须执行 但是,如果我设置了runat=“server”或使用了asp:checkbox,则不会调用下面的函数。我尝试使用下面的代码作为asp:checkbox以及page_load中的输入框,但没有调用该函数 C#代码 jQuery函数 function to

我有一个jQuery函数,如下所示,我希望在单击复选框时调用它。当我使用
input type=“checkbox”
时,它工作正常。但是我想在c#code(fillform())中选中/取消选中复选框,并基于此,JavaScript函数也必须执行

但是,如果我设置了
runat=“server”
或使用了
asp:checkbox
,则不会调用下面的函数。我尝试使用下面的代码作为asp:checkbox以及page_load中的输入框,但没有调用该函数

C#代码

jQuery函数

 function toggleVehicle() {
        if ($('#chkVehicle').is(':checked')) {
            $('#divVehicle :input').removeAttr('disabled');
            $('#divVehicle').css({ "background-color": 'transparent' });
        } else {
            $('#divVehicle :input').attr('disabled', true);
            $('#divVehicle').css({ "background-color": 'gray' });
        }
    }

这是因为asp.net会在ID中添加更多内容,如ctl、contentplaceholder等。。。类似于
ctl00\u contentplaceholder 1\u chkVehicle
。相反,您可以这样做:

 function toggleVehicle() {
         var chkVehicle  = '#<%= chkVehicle.ClientID %>';
        if ($(chkVehicle).is(':checked')) {
            $('#divVehicle :input').prop('disabled', false);
            $('#divVehicle').css({ "background-color": 'transparent' });
        } else {
            $('#divVehicle :input').prop('disabled', true);
            $('#divVehicle').css({ "background-color": 'gray' });
        }
    }
或者正如@jsonscript所建议的那样

chkVehicle.Attributes.Add("onclick", "toggleVehicle('#" + chkVehicle.ClientId + "');");

另外,不要使用
onclick
属性,而是将处理程序绑定到元素

  $(function(){ //DOM ready
       $('#<%= chkVehicle.ClientID %>').change(toggleVehicle);   

  });

   function toggleVehicle() {
         var $divVehicle = $('#divVehicle');
        if (this.checked) {
            $divVehicle.css({ "background-color": 'transparent' });
        } else {
            $divVehicle.css({ "background-color": 'gray' });
        }
        $divVehicle.find(':input').prop('disabled', !this.checked);
   }
$(函数(){//DOM就绪
$('#')。更改(切换车辆);
});
功能切换车辆(){
变量$divVehicle=$(“#divVehicle”);
如果(选中此项){
$divVehicle.css({“背景色”:“透明”});
}否则{
$divVehicle.css({“背景色”:“灰色”});
}
$divVehicle.find(':input').prop('disabled',!this.checked);
}

如果您没有使用较旧版本的jquery,也可以使用prop而不是attr。这将比attr更好地设置此类属性,这是因为asp.net会向ID附加更多内容,如ctl、contentplaceholder等。。。类似于
ctl00\u contentplaceholder 1\u chkVehicle
。相反,您可以这样做:

 function toggleVehicle() {
         var chkVehicle  = '#<%= chkVehicle.ClientID %>';
        if ($(chkVehicle).is(':checked')) {
            $('#divVehicle :input').prop('disabled', false);
            $('#divVehicle').css({ "background-color": 'transparent' });
        } else {
            $('#divVehicle :input').prop('disabled', true);
            $('#divVehicle').css({ "background-color": 'gray' });
        }
    }
或者正如@jsonscript所建议的那样

chkVehicle.Attributes.Add("onclick", "toggleVehicle('#" + chkVehicle.ClientId + "');");

另外,不要使用
onclick
属性,而是将处理程序绑定到元素

  $(function(){ //DOM ready
       $('#<%= chkVehicle.ClientID %>').change(toggleVehicle);   

  });

   function toggleVehicle() {
         var $divVehicle = $('#divVehicle');
        if (this.checked) {
            $divVehicle.css({ "background-color": 'transparent' });
        } else {
            $divVehicle.css({ "background-color": 'gray' });
        }
        $divVehicle.find(':input').prop('disabled', !this.checked);
   }
$(函数(){//DOM就绪
$('#')。更改(切换车辆);
});
功能切换车辆(){
变量$divVehicle=$(“#divVehicle”);
如果(选中此项){
$divVehicle.css({“背景色”:“透明”});
}否则{
$divVehicle.css({“背景色”:“灰色”});
}
$divVehicle.find(':input').prop('disabled',!this.checked);
}

如果您没有使用较旧版本的jquery,也可以使用prop而不是attr。这将比代码中的attr更好地设置此类属性:
chkVehicle.Attributes.Add(“onclick”、“toggleVehicle();”,chkVehicle是复选框的Id


将复选框的id设置为“Static”,因为在呈现.aspx页面时,它会将dom的其他id附加到控件id。Static将阻止此更改,并且复选框的id将保持不变。

在此代码中:
chkVehicle.Attributes.Add(“onclick”,“toggleVehicle();”,chkVehicle是复选框的Id


将复选框的id设置为“Static”,因为在呈现.aspx页面时,它会将dom的其他id附加到控件id。Static将阻止此更改,并且复选框的id将保持不变。

原因可能是jQuery的id选择器。
如果使用
母版页
用户控件
,则asp.net的Id会发生更改
您可以对控件使用静态clientId模式,该模式不会更改控件的id

这里有一篇同样的好文章

原因可能是jQuery的Id选择器。
如果使用
母版页
用户控件
,则asp.net的Id会发生更改
您可以对控件使用静态clientId模式,该模式不会更改控件的id

这里有一篇同样的好文章

此方法的另一种替代方法是将控件的id传递到javascript函数中,这样您的c#将是
chkVehicle.Attributes.Add(“onclick”、“toggleVehicle”(+chkVehicle.ClientId+)”)
那么您的JS将像
函数toggleVehicle(chkboxide){}
@jasonscript还有一件事是prop v/s attr。我已经更新了答案。直到你的评论我才注意到内联
onclick上的用法:)谢谢。如果我手动单击该复选框,则会执行该函数。但是当复选框的值是从c代码设置的,如文章中所示,则此函数无效。可以实现吗?@user1616785如果你需要手动触发它。例如,对于最后一个代码片段,您只能在那里触发它。
change(toggleVehicle).change()`@PSL非常感谢,效果很好。但我真的不懂这句话;请问这是什么意思。更改(切换车辆)。更改();此方法的另一种替代方法是将控件的id传递到javascript函数中,这样您的c#将是
chkVehicle.Attributes.Add(“onclick”、“toggleVehicle”(+chkVehicle.ClientId+)”)
那么您的JS将类似于
函数toggleVehicle(chkboxida){}
@jasonscript还有一件事是prop v/s attr。我已经更新了答案。直到你的评论我才注意到内联
onclick上的用法:)谢谢。如果我手动单击该复选框,则会执行该函数。但是当复选框的值是从c代码设置的,如文章中所示,则此函数无效。可以实现吗?@user1616785如果你需要手动触发它。例如,对于最后一个代码片段,您只能在那里触发它。
change(toggleVehicle).change()`@PSL非常感谢,效果很好。但我真的不懂这句话;请问这是什么意思。更改(切换车辆)。更改();