在调用带有字符串参数的javascript函数后面引用ClientID的代码中添加onclick属性 - javascript

我环顾四周,但我找不到将其组合在一起所需的所有部件。问题是我想从多个地方调用相同的javascript函数,因此我需要将元素的ID传递给函数,以便可以全部更改它们。这个想法很简单。我只希望四个复选框在单击时调用此函数,以防止最后一个复选框被取消选中。到目前为止,这就是我所拥有的。

HTML:

<asp:CheckBox ID="cbBlue" Text="Blue" Checked="true" runat="server" />
<asp:CheckBox ID="cbGreen" Text="Green" Checked="true" runat="server" />
<asp:CheckBox ID="cbRed" Text="Red" Checked="true" runat="server" />
<asp:CheckBox ID="cbYellow" Text="Yellow" Checked="true" runat="server" />
<asp:HiddenField ID="hdnCheckCount" runat="server" Value="4" />

C#:

protected void Page_Load(object sender, EventArgs e)
{
    cbBlue.Attributes.Add("onclick", "checkCheck(" + this.ClientID + ")");
    cbGreen.Attributes.Add("onclick", "checkCheck(" + this.ClientID + ")");
    cbRed.Attributes.Add("onclick", "checkCheck(" + this.ClientID + ")");
    cbYellow.Attributes.Add("onclick", "checkCheck(" + this.ClientID + ")");
}

Javascript:

function checkCheck(elementID) {
    if ($('#<%=hdnCheckCount.ClientID%>').val() == 1) {
        elementID.prop("checked", true);
        return;
    }
    else {
        if (elementID.is(":checked")) {
            elementID.prop("checked", false);
            $('#<%=hdnCheckCount.ClientID%>').val($('#<%=hdnCheckCount.ClientID%>').val() - 1);
        }
        else {
            elementID.prop("checked", true);
            $('#<%=hdnCheckCount.ClientID%>').val($('#<%=hdnCheckCount.ClientID%>').val() + 1);
        }
    }
}

这可能吗?我靠近吗?另外,我不确定是否需要在javascript中实际设置复选框的选中状态,因为我猜这已经在其他地方处理了。但是,我不确定将其强制为true是否可行,因为在javascript函数运行后仍可能未被选中。

参考方案

由于实际上没有数据传递给后端,因此建议您完全使用javascript进行此操作。由于我看到您正在使用jQuery,所以我建议这样做。

首先,将一个类添加到所有复选框

<asp:CheckBox ID="cbBlue" CssClass="keepOneChecked" Text="Blue" Checked="true" runat="server" />
<asp:CheckBox ID="cbGreen" CssClass="keepOneChecked" Text="Green" Checked="true" runat="server" />
<asp:CheckBox ID="cbRed" CssClass="keepOneChecked" Text="Red" Checked="true" runat="server" />
<asp:CheckBox ID="cbYellow" CssClass="keepOneChecked" Text="Yellow" Checked="true" runat="server" />

然后使用jQuery绑定onclick事件

$(function(){ 
    //bind event
    $('.keepOneChecked').click(function(e){
        //get all the checkboxes that ARE checked
        //.keepOneChecked is applied to a span wrapping the input and label because of ASP
        var $checked = $('.keepOneChecked input:checked');
        if( $checked.length == 1){
            //if there is only 1, disable it so you can't uncheck it
            $checked.attr('disabled',true);
        }
        else{
            //otherwise a second or more just got checked so enable all of them
            $checked.attr('disabled',false);
        }
    }); 
});

至于你具体遇到的问题,我想当你有约束力时

cbRed.Attributes.Add("onclick", "checkCheck('#<%=this.ClientID%>')");

页面引用“ this”而不是元素,加上语法错误。您可以尝试:

cbRed.Attributes.Add("onclick", "checkCheck('"+cbRed.ClientID+"')");

看看是否可行,但我会先尝试仅在jQuery中进行。

javascript popupwindow之后的行如何工作? - javascript

好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…

Javascript-Urls的奇怪字符串比较行为 - javascript

最近,在编写我无法理解的javascript时遇到了字符串比较的问题。我从完全相同的网址创建了两个字符串,当我比较它们时返回false,但是在重新分配相同的字符串后,比较返回true。这是我的示例:var str1 = "http://google.com/"; var str2 = "http://google.com‏/&#…

Javascript-从当前网址中删除查询字符串 - javascript

单击提交按钮后,我需要从网址中删除查询字符串值。我可以用jQuery做到这一点吗?当前网址:siteUrl/page.php?key=value 页面提交后:siteUrl/page.php 实际上,我已经从另一个带有查询字符串的页面着陆到当前页面。我需要在页面首次加载时查询字符串值以预填充一些详细信息。但是,一旦我提交了表格,我就需要删除查询字符串值。我已…

在JavaScript函数中转义引号 - javascript

我正在尝试将变量传递给javascript函数。根据用户的选择,它可以是文本或图像。这里已经讨论了类似的问题,但我无法解决。在php中,我这样编码:if ($choice == 1) { $img = '<img src = "../folder/'.$_SESSION["img"].'�…

如何调用超链接单击中包含单引号的消息的JavaScript警报? - javascript

我陷入了javascript问题。我正在使用C#编写可以调用javascript来显示警报消息的超链接。请参阅下面的代码以了解它是如何完成的:首先,这是C#从服务器端编写的代码://Server side code string myHyperlink = "<a href='#' onclick=\"alert…