Bir açılan liste öğesi jquery çalışmıyorsa devre dışı bırakma

Jquery kullanarak açılır liste öğesini devre dışı bırakmak istiyorum. Endeks değeri -1 ve değer ------- Dahili -------. Aşağıda tek tek sözdizimlerini denedim (Çözümler benzer soruların cevaplarıydı). Hiçbiri çalışmıyor. IE8 kullanıyorum.

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 -------']"));

Tasarımcı: Aspx

<div class="selectionControls">
  
  
  <div class="subSelectionControl" id="AllowSubcotractingSelection" style="display: none;">
    <div class="subContractingControls">
      Parent BU:
      
        <div class="subContractingControls">
          Supplier *:
          
            
            
          
        </div>
    </div>
  </div>

Aspx.cs

public Dictionary 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
Html’yi gösterebilir misin
katma yazar Darren Sweeney, kaynak
@DarrenSweeney tasarımcı kodu eklendi
katma yazar Manoj Nayak, kaynak
Sorun $ ("# ChildOrganizationDropDownList option") bölümünde görünmektedir. Ve başka bir sözdizimine değiştirilmeli.
katma yazar Manoj Nayak, kaynak
Doğru girinti düzenlememi uyguladıktan sonra, 1 açıklığın ve 2 div'in kapalı olmadığını göreceksiniz. Bu, javascript'in doğru çalışmasını engelleyebilir ... yalnızca bir tahmin
katma yazar maraca, kaynak
katma yazar Vigneshwaran, kaynak

8 cevap

I used each and it worked for me: https://jsfiddle.net/pz9curkb/1/




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

Lütfen bu çözümde $ (this) yerine bunu kullandığımı, yani JavaScript tarafından sağlanan devre dışı seçeneği kullandığımı unutmayın.

3
katma
@ManojNayak ana sayfanız var mı?
katma yazar renakre, kaynak
Bu seçenek bile işe yaramıyor.
katma yazar Manoj Nayak, kaynak

İlk olarak, ASP.NET, ChildOrganizationDropDownList denetiminizdeki işlenen istemci kimliğini değiştirebilir. Bunu yönetilebilir hale getirmek için ClientIDMode'u Statik olarak ayarlamalısınız:


(Bkz. MSDN Kütüphane .) Şimdi, bu kontrolü $ ("# ChildOrganizationDropDownList") jQuery seçicisini kullanarak bulabileceğinizi bileceksiniz.

İkincisi, JavaScript’inizin DOM’in yüklenmesini bitirmesini beklediğinden emin değilim. Çok erken ateş ederse, hiçbir şey bulamaz (henüz yüklenmediğinden). $ (document) .ready (handler) veya kısayol $ (handler) 'ı kullanın.

Şimdi, ChildOrganizationDropDownList öğesinde "-1" değerine sahip tüm seçenekleri devre dışı bırakan bir JavaScript şöyle görünebilir:

$(function() {//Wait for the DOM to load
  $("#ChildOrganizationDropDownList option[value='-1']").attr("disabled", "disabled");
});
3
katma
Muhtemelen ClientIDMode = "Statik" 'in .NET 4 ile "yeni" olduğunu belirtmekte fayda var. OP daha eski bir sürüm kullanıyorsa, ClientID'yi kontrol ünitesinden JavaScript'e almaları gerekir.
katma yazar drs9222, kaynak

Bunu dene:-

kodu aşağıdaki gibi document.ready 'a yerleştirdiğinizden emin olun.

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

Kullanıcının belirli bir seçeneği seçmesini istemiyorsanız neden devre dışı bırakmak yerine onu gizlemiyorsunuz?

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

Veya daha iyisi nesnenin üzerini kaldırmak,

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

Böylece seçemezler.

1
katma
Açılan pencereye iki değer kümesi yüklüyorum ve bunlar arasında farklılık göstermek istiyorum
katma yazar Manoj Nayak, kaynak

Aşağıdaki benim için çalıştı

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

Working JS Fiddle http://jsfiddle.net/jt47kj5n/1/

Değeri tek tırnak işaretleri ile sararak da deneyebilirsiniz.

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

Sitenizde -1 değeri hiçbir zaman seçilemezse, bunu kolayca yapabilirsiniz:

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

Aksi takdirde bunu yapabilirsiniz:

  1. Wrap your dropdown in div tags with an id (or you can also define a unique class and use it for all dropdowns with those properties):

    <div id="my-dropwdown">
        
    </div>
    
  2. Select all the options inside the div with value="-1" and disable them:

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

    or

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

    and if you want to select over the class:

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

Aslında ASP.net Webform mimarisinde jQuery/javascript'inizi nerede yazdığınız da önemlidir.

if you are adding script in your aspx page where control is place. you can use '<%= Control.ClientID %>' to get current if of control. If you are placing your code in aspx page but in header and your control is in your child page you can use

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

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

Eğer ayrı bir JS dosyanız varsa, kontrol için ClientIDMode = "Static" ayarlamanız ve kimliğinizi atamanız gerekir (ancak bu kimliğin başka herhangi bir kontrol için kullanılmaması ve sayfada benzersiz olması gerektiğine dikkat edin).

1
katma

Yine de IE8'i desteklemek yerine 2 yeni IE sürümü için destek vermenizi tavsiye ederim.

Aşağıdaki kodu test ettim ve iyi çalışıyor.

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

    })

As you are supporting IE 8 you should include a jQuery version which is < jQuery 2.x https://jquery.com/browser-support/

1
katma