我想使用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";
}
}
答案 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);
否则你可以这样做:
使用div
在id
代码中包含您的下拉列表(或者您也可以定义唯一的class
并将其用于包含这些属性的所有下拉菜单):
<div id="my-dropwdown">
<asp:DropDownList ... />
</div>
使用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');