禁用下拉列表项jquery无法正常工作

时间:2015-04-10 11:09:43

标签: jquery asp.net

我想使用jquery禁用下拉列表项。 索引值为-1,值为-------内部-------。我逐一尝试了以下语法(解决方案是类似问题的答案)。他们都没有工作。我使用的是IE8。

var value="------- Internal -------";
$("[id*='ChildOrganizationDropDownList'] option[value=" + value + "]").prop('disabled','disabled'); 
$("#ChildOrganizationDropDownList option[value=" + value + "]").prop('disabled','disabled');    
$("[id*='ChildOrganizationDropDownList']").option('------- Internal -------').prop('disabled',true);    
$("id*='ChildOrganizationDropDownList' option[value='------- Internal -------']").prop('disabled','disabled');    
$("[id*='ChildOrganizationDropDownList']").option("[value*='------- Internal -------']").prop('disabled', true);
$("[id*='ChildOrganizationDropDownList']").attr("disabled",$(_this.CustomerNameDropDownList).find("option[value='------- Internal -------']"));

设计师:Aspx

<div class="selectionControls">
  <asp:CheckBox ID="chkSubcontracting" runat="server" Text="Subcontracting" Enabled="true" />
  <asp:HiddenField ID="SubcontractingHiddenField" runat="server" />
  <div class="subSelectionControl" id="AllowSubcotractingSelection" style="display: none;">
    <div class="subContractingControls">
      Parent BU:
      <span>
        <div class="subContractingControls">
          Supplier <em class="mandatoryIndicator">*</em>:
          <span>
            <asp:DropDownList ID="ChildOrganizationDropDownList" runat="server" Width="200px" />
            <asp:HiddenField ID="IxChildOrganizationHiddenField" runat="server" />
          </span>
        </div>
    </div>
  </div>

Aspx.cs

public Dictionary<int, string> ChildOrganizations
        {
            set
            {
                var result = value;
                result.Add(0, "Select Supplier");
                ChildOrganizationDropDownList.DataSource = result;
                ChildOrganizationDropDownList.DataTextField = "value";
                ChildOrganizationDropDownList.DataValueField = "key";
                ChildOrganizationDropDownList.DataBind();
                ChildOrganizationDropDownList.SelectedValue = "0";


            }
        }

8 个答案:

答案 0 :(得分:3)

我使用了each,它对我有用:https://jsfiddle.net/pz9curkb/1/

<select id="ChildOrganizationDropDownList">
    <option value="Default">Default</option>
    <option value="A">A</option>
    <option value="B">------- Internal -------</option>
    <option value="E">E</option>
</select>


 $("#ChildOrganizationDropDownList option").each(function(){   
     if($(this).text() === "------- Internal -------"){
        this.disabled  = true;
     }
});

请注意在此解决方案中我使用此代替$(this),这意味着我使用了javascript提供的禁用选项

答案 1 :(得分:3)

首先,ASP.NET可能会更改ChildOrganizationDropDownList控件上呈现的客户端ID。为了使这个可管理,你应该将ClientIDMode设置为Static:

<asp:DropDownList ID="ChildOrganizationDropDownList" runat="server" Width="200px" ClientIDMode="Static" />

(请参阅MSDN Library。)现在,您将知道可以使用jQuery选择器$("#ChildOrganizationDropDownList")找到此控件。

其次,我不确定您的JavaScript是否等待DOM完成加载。如果它太早发射,它将找不到任何东西(因为它尚未加载)。使用$(document).ready(handler)或速记$(handler)

现在,在ChildOrganizationDropDownList中禁用值为“-1”的所有选项的JavaScript可能如下所示:

$(function() { // Wait for the DOM to load
  $("#ChildOrganizationDropDownList option[value='-1']").attr("disabled", "disabled");
});

答案 2 :(得分:2)

试试这个: -

确保将代码放在document.ready中,如下所示

$(document).ready(function(){
    $("select[ID$='ChildOrganizationDropDownList']").find("option").each(function(){   
         if($(this).text() === "------- Internal -------"){
            this.disabled  = true;
         }
    });    
});

答案 3 :(得分:1)

虽然我建议你更愿意支持2个最新的IE版本,而不是支持IE8。

我测试了以下代码,它运行正常。


    $(document).ready(function()
    {
        var valinp="------- Internal -------";
        $("#ChildOrganizationDropDownList option[value='" 
            +  valinp + "']").attr("disabled","");

    })

当你支持IE 8时,你应该包含一个jquery版本,它是&lt; jQuery 2.x https://jquery.com/browser-support/

答案 4 :(得分:1)

ASP.net中的Actualy Webform架构在你编写jQuery / javascript的地方也很重要。

如果要在控件所在的aspx页面中添加脚本。您可以使用'<%= Control.ClientID %>'获取当前的控制权。如果您将代码放在aspx页面中但在标题中,并且您的控件位于子页面中,则可以使用

<%= Page.Master.FindControl("ContentPlaceHolder1").FindControl("Button1").ClientID %>'

  var currentControlID='<%= Control.ClientID %>';
    $("#"+currentControlID+" option").each(function(){   
     if($(this).text() === "------- Internal -------"){
        this.disabled  = true;
         }
    });

如果你有单独的js文件,那么你必须设置ClientIDMode =&#34; Static&#34;用于控制并为您分配ID(但请确保此ID不能用于任何其他控件,并且在页面中必须是唯一的。)。

答案 5 :(得分:1)

如果您不希望用户选择该特定选项,为什么不隐藏它而不是禁用它?

$("#ChildOrganizationDropDownList option:contains('Internal')").hide();

甚至可以更好地删除对象,

$(document).delegate("#ChildOrganizationDropDownList","click",function(){
    $(this).find("option:contains('Internal')").detach();
});

所以他们不能选择它。

答案 6 :(得分:1)

如果您的整个网站永远无法选择价值-1,那么您可以像这样轻松完成:

$('option[value=-1]').prop('disabled', true);

否则你可以这样做:

  1. 使用divid代码中包含您的下拉列表(或者您也可以定义唯一的class并将其用于包含这些属性的所有下拉菜单):

    <div id="my-dropwdown">
        <asp:DropDownList ... />
    </div>
    
  2. 使用div选择value="-1"内的所有选项并停用它们:

    $('option[value=-1]', $('#my-dropdown')).prop('disabled', true);
    

    $('option[value=-1]', $('#my-dropdown')).attr('disabled', 'disabled');
    

    如果你想在课堂上选择:

    $('option[value=-1]', $('.subContractingControls')).prop('disabled', true);
    

答案 7 :(得分:1)

以下为我工作

$("#sel option[value=---Internal---]").prop('disabled','disabled');

工作JS小提琴 http://jsfiddle.net/jt47kj5n/1/

您也可以尝试使用单引号包装值。

$("#sel option[value='---Internal---']").prop('disabled','disabled');