【问题标题】:How to pass an anonymous array of strings to a JavaScript function?如何将匿名字符串数组传递给 JavaScript 函数?
【发布时间】:2010-04-05 17:48:01
【问题描述】:

我想将一组控件的 ID 传递给一个 javascript 脚本函数,以便它切换控件的启用状态。

例如,在C# 中会是这样的:

func(false, new[] { "Control1", "Control2", "Control3" });

在该功能中,我想找到相应的控件并禁用/启用它们。对于一个控件,我会这样做:

<script type="text/javascript" language="javascript">
    function switchControls(value, arr) {
        for (var n = 0; n < array.length; n++)
            document.getElementById([n]).disabled = value;
    }
</script>

<asp:CheckBox runat="server"
     onclick="switchControls(this.checked,
        [
            '<%= Control1.ClientID %>',
            '<%= Control2.ClientID %>'
        ])" 
     Text="Take?" />

如何正确实施?我必须使用 jQuery 吗?

【问题讨论】:

  • JS 中的数组字面量只是一个逗号分隔的列表[in, square, brackets]。奇怪的是,您的 onclick 处理程序代码中已经有一个这样的示例,所以您已经知道如何去做。您已经向数组中的函数发送了两个控件 ID,而不是一个。那么问题是什么?
  • 似乎是 switchControls 内部数组索引中的错误。
  • @ajm:还是不行。 alert(arr.length) 什么都不显示
  • 对 switchControls 的调用是什么样的?
  • @ajm:我在下面的回答中回答了您的评论

标签: .net asp.net javascript jquery


【解决方案1】:

不需要 jQuery(或任何其他库)。

看起来你的代码只需修改一两个就可以解决问题:

<script type="text/javascript">
    function switchControls(value, arr) {
        for (var n = 0; n < arr.length; n++){
            document.getElementById(arr[n]).disabled = value;
        }
    }
</script>  

只要您的 ASP 语句传入一个布尔值和一个 ID 数组(看起来它已经这样做了,但我对 ASP 不熟悉),它应该可以工作。例如,您的onClick 可以像这样调用switchControls

switchControls(true, ['foo','bar','baz']);

【讨论】:

  • switchControls(this.checked, [ &lt;%= txtMinimalCommission.ClientID %&gt; ] )switchControls(this.checked, [ txtMinimalCommission.ClientID ] ) 都不作为数组传递。其中不被JS函数识别为数组
  • clientID 不是 JavaScript 可以识别的有效属性。您需要让 ASP 将其渲染出来,然后将其作为字符串传递到您的数组中。类似switchControls(this.checked, [ "&lt;%= txtMinimalCommission.ClientID %&gt;" ] )
【解决方案2】:

您不必“必须”使用 jQuery,但使用它会更酷:)

function checkme(arr){
   if($.isArray(arr)){
     $.each(arr, function(){
       var currentState = this.attr('disabled');
       if(currentState == 'disabled' || currentState == 'true'){
          this.removeAttr('disabled');           
       }
       else{
          this.attr('disabled', 'disabled');
       }
     });
   }
}

用法:checkme([$("#someid"), $("#anotherid"), $("#anotherid")]);

【讨论】:

  • 您的代码需要修改以允许切换以启用/禁用控件。
  • 如何结合ASP.NET调用'&lt;%= code %&gt;'和jQuery调用$("code")
【解决方案3】:
<script type="text/javascript" language="javascript">
    function toggleControls(value) {
        $('.toggle').each(function() {
            if (value) {
                $(this).removeAttr('disabled');

            }
            else {
                $(this).attr('disabled', 'true');
            }
        });
    }
</script>

<asp:CheckBox runat="server" onclick="toggleControls(this.checked)" Text="Take?" />
<asp:TextBox runat="server" CssClass="toggle" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多