84 messaggi dal 11 luglio 2013
Salve, ho un tabella contenente un dropdownlist con la quale in base al valore scelto, viene disabilitata una textbox,il codice è il seguente:
<td>
                <b>Oggetto:</b><br />
                <div class="editor-field">
                    @Html.DropDownList("TipoID")
                    <script type="text/javascript">
                        TipoID.onchange = function () {
                            var selection = TipoID.options[TipoID.selectedIndex].innerText;
                            if (selection == "Fisso") {
                                Alimentatore.disabled = "disabled";

                            }
                            else {
                                Alimentatore.disabled = "";

                            }
                        };
                    </script>
                </div>
            </td>


Questo codice funziona in Google Chrome ma non in Mozilla, cosa devo cambiare per farlo funzionare?

Siamo buoni a nulla, ma capaci di tutto.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
il problema è nel javascript: se vuoi ottenere un riferimento alla dropdownlist o alla textbox, non puoi semplicemente usare i loro ID come TipoID, ma devi ricorrere alla funzione document.getElementById("TipoID")

Dunque prova a sostituire così il tuo blocco <script>
<script type="text/javascript">
  //qui ottengo i riferimenti alla ddl e alla textbox
  var TipoID = document.getElementById("TipoID");
  var Alimentatore = document.getElementById("Alimentatore");
        //il restante script resta invariato
    TipoID.onchange = function () {
        var selection = TipoID.options[TipoID.selectedIndex].innerText;
        if (selection == "Fisso") {
            Alimentatore.disabled = "disabled";
        }
        else {
            Alimentatore.disabled = "";
        }
    };
</script>

Ho visto che hai lo stesso problema anche nell'altro thread. La soluzione è la stessa per entrambi: bisogna usare document.getElementById.

Esistono anche altre soluzioni, ma se riesci a risolvere così può andar bene. Questa che abbiamo visto è quella che richiede il minor numero di modifiche.

ciao,
Moreno
Modificato da BrightSoul il 11 novembre 2013 23.02 -

Enjoy learning and just keep making
84 messaggi dal 11 luglio 2013
Ho fatto come mi ha detto lei ma non mi funziona.. :(

Siamo buoni a nulla, ma capaci di tutto.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Anna, prova a spostare quel blocco di codice javascript in fondo alla tua view. L'importante è che si trovi dopo le caselle coinvolte, cioè dopo la TipoID e la Alimentatore.

Se continua a non funzionare, apri la console javascript da Mozilla premendo i tasti CTRL+Shift+J, poi ricarica la pagina e posta qui gli eventuali errori che vedi apparire quando provi a cambiare valore nella dropdownlist.

ciao,
Moreno

Enjoy learning and just keep making
84 messaggi dal 11 luglio 2013
Ho provato a mettere lo script in fondo alla view e non funziona ugualmente.. allora ho fatto come mi ha detto lei, ho aperto la console e ho 2 errori: 1. RadioSi is not defined 2. Alimentatore is not defined

Siamo buoni a nulla, ma capaci di tutto.
11.886 messaggi dal 09 febbraio 2002
Contributi

ho aperto la console e ho 2 errori

benissimo, dobbiamo solo risolvere questi due problemi. Capito qual è la questione di fondo? Se vuoi far riferimento ad elementi della pagina, come dropdownlist e textbox, non basta chiamarli con il loro ID ma bisogna usare la funzione document.getElementById.


RadioSi is not defined

Questo si riferisce probabilmente al codice che hai postato nell'altro thread. Ad esempio scrivi:
RadioSi.onchange = RadioCheck;

Ma questo non va bene perché, come abbiamo detto, non si può ottenere un riferimento a RadioSi semplicemente usandone l'ID. Dunque, per non modificare troppe cose nel codice, rendiamogli disponibile una variabile chiamata RadioSi che contiene il riferimento alla radio button.
var RadioSi = document.getElementById("RadioSi");

Questa riga di codice va messa prima di utilizzare il nome RadioSi per la prima volta.
Ad esempio:
<script type="text/javascript">
    var RadioSi = document.getElementById("RadioSi");
    var RadioNo = document.getElementById("RadioNo");
    var borsaDetails = document.getElementById("borsaDetails");
    function RadioCheck() {
        if (RadioNo.checked) {         
            borsaDetails.style.display = "none";
        }
        else {            
            borsaDetails.style.display = "block";
        }
    }
    RadioSi.onchange = RadioCheck;
    RadioNo.onchange = RadioCheck;
</script>

Come vedi ho dovuto creare sia la variabile RadioSi che RadioNo e borsaDetails, perché anche quelli avrebbero sollevato lo stesso errore "is not defined".

Ricorda che anche questo blocco script va messo alla fine della view, cioè dopo gli elementi RadioSi, RadioNo e borsaDetails.


Alimentatore is not defined

Questo è strano perché la variabile Alimentatore l'abbiamo creata con lo script del post precedente. Ecco la riga di codice:
var Alimentatore = document.getElementById("Alimentatore");

Può darsi comunque che il nome Alimentatore sia stato usato in qualche altro script, più in alto nella pagina.
La console degli errori di Mozilla è molto utile perché, oltre riportare il testo dell'errore, ti segnala di fianco anche l'esatta riga in cui il problema si è originato. Cliccalo e Mozilla ti aprirà il sorgente della tua pagina alla riga indicata. Cerca di capire se lì hai usato il nome Alimentatore senza che prima venisse dichiarata la variabile.

ciao,
Moreno

Enjoy learning and just keep making
84 messaggi dal 11 luglio 2013
Il problema dei radiobutton è stato risolto, grazie a lei :) adesso però mi è rimasto quello della ddl.. L'errore segnalato dalla console l'ho risolto mettendo var Alimentatore = document.getElementById("Alimentatore") perchè inizialmente la txtbox deve essere disabilitata in quanto il valore di default della ddl è Fisso
<b>Alimentatore:</b><br />
                <div class="editor-field">
                    @Html.EditorFor(model => model.Alimentatore)
                    @Html.ValidationMessageFor(model => model.Alimentatore)
                    <script type="text/javascript">
                        var Alimentatore = document.getElementById("Alimentatore");

                        Alimentatore.disabled = "disabled";
                    </script>
                </div>

E questo codice fa perchè quando faccio partire la pagina mi viene disabilitata la txtbox..
SOLO CHE: quando cambio il valore del ddl per es. scelgo Portatile, e poi rimetto Fisso la txtbox non si disabilita nuovamente rimane abilitata.. Di errori in console non ce n'è nessuno.. Il codice nello script è quello che mi aveva detto lei:
<script type="text/javascript">
    
    
    var TipoID = document.getElementById("TipoID");
    var Alimentatore = document.getElementById("Alimentatore");
    
    TipoID.onchange = function () {
        var selection = TipoID.options[TipoID.selectedIndex].innerText;
        if (selection == "Fisso") {
            Alimentatore.disabled = "disabled";
        }
        else {
            Alimentatore.disabled = "";
        }
    };
</script>

Siamo buoni a nulla, ma capaci di tutto.
11.886 messaggi dal 09 febbraio 2002
Contributi
ok, dai che siamo quasi vicini alla soluzione :)
Il problema adesso dovrebbe essere in questa riga.
var selection = TipoID.options[TipoID.selectedIndex].innerText;

Con questa sintassi, su Mozilla la variabile selection non contiene il valore sperato. Infatti lo puoi verificare qui, dove ti restituisce "undefined" anziché "Fisso" o "Portatile".

Ti basta modificare quella riga così, che è anche più breve.
var selection = TipoID.value;


ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.