Abilitare una textbox in base al valore scelto in una radiobuttonlist

sabato 21 novembre 2009 - 16.17

marx731 Profilo | Newbie

Ciao a tutti,
ho una pagina asp.net con un radio button list e una text box quest'ultima al load della pagina e' invisibile e disabilitata.
Quello che vorrei fare e :' se l'utente sceglie un determinato valore della radiobuttonlist abilitare la text box.

avevo pensato di mettere in in testa alla pagina aspx uno script tipo questo
<script language="JavaScript" type="text/JavaScript">
function abilita()
{
var obj = document.getElementById("<%=rbl_tipoPagamento.ClientID%>");
if (obj.SelectedIndex == 4)
{
document.getElementById("<%=txt_bollettino.ClientID%>").enable=true;
document.getElementById("<%=txt_bollettino.ClientID%>").visible=true;
}
else
{
document.getElementById("<%=txt_bollettino.ClientID%>").enable=false;
document.getElementById("<%=txt_bollettino.ClientID%>").visible=false;
}
}
</script>
dove rbl_tipopagamento e' l'id della radiobuttonlist e txt_bollettino e' l'id della text box

e poi nel controllo asp
<asp:RadioButtonList ID="rbl_tipoPagamento" runat="server" OnSelectedIndexChanged="abilita()">
<asp:ListItem>Contanti alla Consegna</asp:ListItem>
<asp:ListItem>Circuito Visa</asp:ListItem>
<asp:ListItem>Circuito MasterCard</asp:ListItem>
<asp:ListItem>Circuito Am. Express</asp:ListItem>
<asp:ListItem>Bollettino Postale</asp:ListItem>
</asp:RadioButtonList>
ma visual studio si incazza (dice che non esiste una funzione abilita nella mia pagina )
cosa sbaglio non sono molto ferrato con javascript????
grazie.

Brainkiller Profilo | Guru

>ma visual studio si incazza (dice che non esiste una funzione
>abilita nella mia pagina )
>cosa sbaglio non sono molto ferrato con javascript????

Ciao,
allora tu hai specificato un OnSelectedIndexChanged che presuppone una funzione server side non javascript. Per questo si incazza. Allora.... potresti comunque usare questo evento (OnSelectedIndexChanged) ma solo inserendo il tutto in un UpdatePanel e quindi facendo uso di AJAX.

L'altra soluzione, quella via javascript che stai tentando di utilizzare richiede l'inserimento di un onchange="abilita()" ma in questo caso non funzionerebbe perchè di solito il RadioButtonList genera un oggetto <table onchange="abilita()"> e quindi certamente non funziona.

La soluzione è di spostare quella logica a livello di ListItem in questo modo:

<asp:ListItem onclick="javascript:abilita('1')">Contanti alla Consegna</asp:ListItem> <asp:ListItem onclick="javascript:abilita('2')">Circuito VISA</asp:ListItem>

io ho messo abilita(1), 2, ecc. dove puoi recupeare la voce selezionata/cliccata. Puoi probabilmente anche mettere un (this) che punterà all'oggetto o altro.
A questo punto procedi tu con il Javascript
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

marx731 Profilo | Newbie

Ok infatti avevo usato ajax con un update panel e funzionava anche se siccome ho un validator sulla text box(non puo' rimanere vuota) ,mi sembrava ieri che lo avevo provato che il required field validator non venisse rispettato...
quindi diciamo che avrei questo secondo problema....

hai una soluzione anche per questo???

la via javascript tentero' di percorrerla ...

ma come ti sembra la funzione javascript che ho scritto io (che mi hai lasciato per esercizio ;-) puo funzionare se utilizzo un listitem come mi suggerisci tu????ovviamente sostituendo l'id della listitem a quello del radiobuttonlist...

cmq grazie

Brainkiller Profilo | Guru

>ma come ti sembra la funzione javascript che ho scritto io (che
>mi hai lasciato per esercizio ;-) puo funzionare se utilizzo
>un listitem come mi suggerisci tu????ovviamente sostituendo l'id
>della listitem a quello del radiobuttonlist...

Certamente.
Abbiamo detto modificando la abilita in questo modo:

function abilita(number) { }

Tu riceverai dentro number il numero della voce visto che chiamavamo con abilita(1) per esempio.
A questo punto fai gli IF del caso mettiamo che 1 nasconde la textbox farai:

if (number==1) { var ob=document.getElementById("<%=txt_bollettino.ClientID%>"); ob.display='none'; }

Non conosco .enable=true / false.
Io uso in genere:

ob.display='none'; (per nasconderlo via CSS)

e

ob.display=''; (per visualizzarlo)

Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

marx731 Profilo | Newbie

Ok allora ho messo la funzione javascript
function abilita(number)
{
var ob=document.getElementById('<%=txt_bollettino.ClientID%>');
if (number==5)
{
ob.display='';
}
else
{
ob.display='none';
}
}
e il controllo asp.net

<asp:RadioButtonList ID="rbl_tipoPagamento" runat="server">
<asp:ListItem onclick="javascript:abilita('1')">Contanti alla Consegna</asp:ListItem>
<asp:ListItem onclick="javascript:abilita('2')">Circuito Visa</asp:ListItem>
<asp:ListItem onclick="javascript:abilita('3')">Circuito MasterCard</asp:ListItem>
<asp:ListItem onclick="javascript:abilita('4')">Circuito Am.Express</asp:ListItem>
<asp:ListItem onclick="javascript:abilita('5')">Bollettino Postale</asp:ListItem>
</asp:RadioButtonList>

ma non succede nulla al click di una delle scelte...

forse non ho capito bene come scrivere la funzione javascript
cmq poi cercando in giro ho trovato che se metto
if (number==5)
{
document.getElementById("<%=txt_bollettino.ClientID%>").disabled=false;
}
else
{
document.getElementById("<%=txt_bollettino.ClientID%>").disabled=true;
}
funziona...
adesso pero' se cerco di fare la stessa cosa con il validator associato alla textbox
document.getElementById("<%=validate_bollettino.ClientID%>").disabled=true; se number != 5 e
document.getElementById("<%=validate_bollettino.ClientID%>").disabled=false altrimenti per il validator questo discorso non funziona me lo fa vedere in grigio invece che in rosso ma non mi fa andare avanti anche se disabled = true

Brainkiller Profilo | Guru

>ma non succede nulla al click di una delle scelte...

ma come no, dovrebbe chiamart la funzione abilita.
alla prima riga della funzione abilita inserisci un alert('prova'); così vedi se viene richiamata.

Non c'è bisogno di disabilitare la textbox perchè se è invisibile è più che sufficiente no ?
Far vedere una textbox disabilitata ha poco senso così come disabilitare una textbox invisibile no ?

Utilizza il metodo che ti ho detto che la fa sparire con display='none'; o riapparire con display='';

Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

marx731 Profilo | Newbie

nella funzione abilita()
ci entra ci ho messo anche l'alert e lo mostra
il problema e' che
non succede nulla con le istruzioni
ob.display='';
oppure
ob.display='none';
invece dovrebbe visualizzare la textbox in un caso e nell'altro farla scomparire...

questo e' quello che ho messo
function abilita(number)
{
alert('pippo');
if (number==5)
{
alert('5');
document.getElementById("<%=txt_bollettino.ClientID%>").display='';
}
else
{
alert('altro');
document.getElementById("<%=txt_bollettino.ClientID%>").display='none';
}
}
pippo ,5 ,altro sono visualizzati quanto alla textbox sta sempre la.

questo e' il controllo asp
<asp:TextBox ID="txt_bollettino" runat="server" Enabled="True" Width="128px"
EnableViewState="False"></asp:TextBox>
allora se non la faccio vedere al load della pagina visible=false esce questo errore
document.getElementById("ctl00_ContentPlaceHolder1_txt_bollettino").display='';
Errore di run-time di Microsoft JScript: 'document.getElementById(...)' è nullo o non è un oggetto
se invece visible = true non da l'errore ma non succede nulla...il discorso che fai te lo condivido pienamente
pero' avevo usato disabled perche' era l'unico modo affinche sta benedetta textbox pur vedendosi non fosse utilizzabile (lo so che non e' bello!)


ciao
Marco.

Brainkiller Profilo | Guru

>nella funzione abilita()
>ci entra ci ho messo anche l'alert e lo mostra
>il problema e' che
> non succede nulla con le istruzioni
>ob.display='';
>oppure
>ob.display='none';

Ops! Scusa, errore mio.

ob.style.display='';

e

ob.style.display='none';

Puoi provare così ?
Sorry

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

marx731 Profilo | Newbie

cosi' funziona, perfetto
grazie.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5