【问题标题】:Why can't I access any properties on my jQuery-returned object?为什么我无法访问 jQuery 返回的对象的任何属性?
【发布时间】:2009-02-25 14:55:20
【问题描述】:

我有以下 javascript:

$(document).ready(function() {
    $('#<%= DropDownList1.ClientID %>').change(function() {
        $('#<%= TextBox1.ClientID %>').disabled = $('#<%= DropDownList1.ClientID %>').selectedIndex != 1;
    });
});

当我更改下拉列表的索引时,没有任何反应。我尝试将代码替换为:

$(document).ready(function() {
    $('#<%= DropDownList1.ClientID %>').change(function() {
        alert($('#<%= DropDownList1.ClientID %>').id);                    
    });
});

这会生成一条提示“未定义”的警报。如果我删除 .id 部分,我会收到一个警报,上面写着 [object Object],所以我猜它有一些东西。我做错了什么?

【问题讨论】:

  • 对于 ASP.NET id,因为它们存在于客户端页面上,您通常可以在 jQuery 中执行以下操作:$('input[id$=TextBox1').它匹配 ID 的结尾,该 ID 始终与您在 ASP.NET 中为元素提供的 ID 相同。这比把 放在你的 js 代码中更干净。
  • 我没有让它工作。您是否错过了该代码中的任何字符?
  • 对不起,这确实有效。我没有开始工作的是 $('input[id$= DropDownList1') 但如果我将其更改为 $('[id$= DropDownList1') 效果很好。由于某种原因,“输入”不适用于 asp.net 下拉列表。

标签: asp.net jquery


【解决方案1】:

在 jQuery 中要实现的一个关键是 $(selector) 返回的是一个 jQuery 对象,而不是 DOM 对象。如果要从 jQuery 对象中获取选择框的值,可以使用 val() 函数,如下所示:

$("#element").val();

如果你想从 jQuery 对象中访问 dom 元素,那也很简单。您可以使用以下内容:

$("#element")[0]; // equivalent to $("#element").get(0)

这应该可以帮助您解决问题。

【讨论】:

    【解决方案2】:
    $(document).ready(function()
    {
        $('#<%= DropDownList1.ClientID %>').change(function()
        {
            // replace 'your value' with the value of dropdown selectedIndex 1
            if ($('#<%= DropDownList1.ClientID %>').val() == 'your value')
                $('#<%= TextBox1.ClientID %>').removeAttr('disabled');
            else
                $('#<%= TextBox1.ClientID %>').attr('disabled', 'disabled');
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 2020-07-09
      • 2015-08-02
      相关资源
      最近更新 更多