2015-04-10 13 views
8

Desidero disattivare l'elemento dell'elenco a discesa utilizzando jquery. Il valore dell'indice è -1 e il valore è ------- Interno -------. Ho provato sotto sintassi uno per uno (le soluzioni erano le risposte per domande simili). Nessuno di loro sta funzionando. Iam utilizzando IE8.Disattivazione di un elemento dell'elenco a discesa jquery non funzionante

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

Designer: 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"; 


      } 
     } 
+1

si può mostrare il codice html –

+0

@DarrenSweeney si aggiunge il codice progettista –

+0

Il problema sembra essere in $ ("opzione # ChildOrganizationDropDownList") parte. E deve essere cambiato con qualche altra sintassi. –

risposta

3

ho usato each e ha funzionato per me: 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; 
    } 
}); 

Si prega di notare in questa soluzione mi noi Ed questo invece di $ (questo), il che significa che ho usato l'opzione disattivata fornito da javascript

+0

Anche questa opzione non funziona. –

+0

@ManojNayak hai una pagina principale? – renakre

2

Prova questo: -

assicuratevi di mettere il codice in document.ready come di seguito

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

In primo luogo, ASP .NET potrebbe modificare l'ID client reso sul controllo ChildOrganizationDropDownList. Al fine di rendere questo gestibile, è necessario impostare ClientIDMode di statico:

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

(Vedere MSDN Library.) Ora, saprete che potete trovare questo controllo tramite il selettore jQuery $("#ChildOrganizationDropDownList").

In secondo luogo, non sono sicuro che il tuo JavaScript sia in attesa del completamento del caricamento da parte del DOM. Se spara troppo presto, non troverà nulla (dal momento che non è ancora stato caricato). Utilizzare $(document).ready(handler) o la stenografia $(handler).

Ora, un JavaScript che disabilita tutte le opzioni con valore "-1" in ChildOrganizationDropDownList potrebbe assomigliare a questo:

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

Probabilmente vale la pena notare che 'ClientIDMode =" Statico "' è "nuovo" con .NET 4. Se l'OP sta utilizzando una versione precedente, sarà necessario che il ClientID venga passato dal controllo al JavaScript. – drs9222

1

Anche se vi consiglio di fornire invece il supporto per 2 la versione più recente di IE piuttosto che sostenere IE8 .

Ho testato il seguente codice e funziona correttamente.

 

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

    }) 

Come si stanno sostenendo IE 8 si dovrebbe includere una versione jQuery che è < jQuery 2.x https://jquery.com/browser-support/

1

actualy in ASP.net architettura Webform è anche indipendentemente da dove si scrive il jQuery/javascript.

se si aggiunge lo script nella pagina aspx in cui è posizionato il controllo. è possibile utilizzare '<%= Control.ClientID %>' per ottenere corrente se di controllo.Se si sta mettendo il codice in pagina aspx ma nell'intestazione e il controllo è nella tua pagina figlio è possibile utilizzare

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

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

Se si dispone di file js separato allora dovete impostare ClientIDMode = "Static" per il controllo e assegnare tu id (ma assicurati che questo id non debba essere usato per nessun altro controllo e deve essere univoco nella pagina).

1

Se non si desidera che l'utente selezioni quell'opzione specifica perché non nasconderlo invece di disabilitarlo?

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

O ancora meglio rimuoverlo onclick dell'oggetto,

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

Quindi non possono selezionarla.

+0

Sto caricando due set di valori nel menu a discesa e voglio distinguere tra quelli –

1

Se il valore -1 non è mai selezionabile attraversato l'intero sito poi basta si può fare molto facilmente in questo modo:

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

Altrimenti si può fare questo:

  1. avvolgere la discesa in div tag con un id (oppure puoi anche definire un unico class e utilizzarlo per tutti i menu a discesa con tali proprietà):

    <div id="my-dropwdown"> 
        <asp:DropDownList ... /> 
    </div> 
    
  2. Selezionare tutte le opzioni all'interno del div con value="-1" e disattivare:

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

    o

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

    e se si desidera selezionare sulla classe:

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

Di seguito ha lavorato per me

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

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

Potete anche provare avvolgendo il valore con apici.

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