2012-11-21 23 views
7

Voglio controllare il valore della casella di testo prima che si verifichi il postback. Ho impostato il valore onClientClick per la mia funzione ma non so come passare i dati da controllare, in questo caso voglio controllare il testo inserito di txt1.Come passare un valore in una funzione javascript all'interno di una pagina aspx onClientClick

<asp:textbox id="txt1" runat="server /> 

<asp:LinkButton ID="LinkButton1" 
       runat="server" 
       Text="Save" 
       onclick="Save" 
       OnClientClick="javascript:check(WANT TO PUT TEXTBOX VALUE HERE);" 
       /> 

mio javascript:

function check(txt) { 
var pattern = /^[0-9]{1,11}(,[0-9]{0,2})?$/; 
if (!pattern.test(txt)) { 
    return false; 
} 
else { 
    return true; 
} 
} 

Il problema è che questa funzione di controllo viene usato insieme l'evento keypress del txt1 così non posso uso:

function check(){ 
    var txt=$('#txt1').val(); 
} 

L'intero codice JS:

$('#txt1').keypress(function (e) { 
    var key = String.fromCharCode(e.which); 
    var txt = $(this).val() + key; 
    if (check(txt)) { 
     // do sth 
    } else { 
     e.preventDefault(); 
     // do sth 
    } 
}); 

Come posso la funzione OnclientCLick per ottenere il valore txt1?

Grazie.

+1

OnClientClick = "javascript: ... <- non è necessario specificare la lingua. Può essere solo JS. –

+0

Non interferisce con il mio problema.Non importa se javascript: è presente o meno – anmarti

risposta

8

Qualcosa del genere:

<asp:textbox id="txt1" runat="server /> 

<asp:LinkButton ID="LinkButton1" 
       runat="server" 
       Text="Save" 
       onclick="Save" 
       OnClientClick="check(document.getElementById('<%=txt1.ClientID%>').value;)" 
       /> 

Modifica:
Altri metodi:

  1. è possibile aggiungerlo sul lato server: LinkButton1.OnClientClick="check(document.getElementById('" + txt1.ClientID + "').value;)";

  2. Se si vuole rimanere nella pagina aspx, è necessario mettere un nome di una funzione javascript nel OnClientClick e implementare la funzione JavaScript in un tag script:

    <asp:LinkButton ID="LinkButton1" 
           runat="server" 
           Text="Save" 
           OnClientClick="validate();" 
           /> 
    <script type="text/javascript"> 
        function validate() { 
         alert(document.getElementById('<%=txt1.ClientID%>').value); 
         return false; 
        } 
    </script> 
    
+0

IE8 non analizza correttamente il punto e virgola. Basta rimuoverlo. Inoltre sostituisce per questa riga: getElementById ('<% = txtPenal.ClientID%>'). Nota "<" e mi lancia un errore javascript di runtime: oggetto non trovato. – anmarti

+0

OK, ho modificato il mio post con altri metodi: sembra impossibile aggiungere direttamente una variabile asp in un link onclientclink ... Anche la risposta data in [questo post] (http://stackoverflow.com/questions/ 4311874/how-to-pass-csharp-binding-variable-to-javascript-function) non funziona per me. –

-2

È sufficiente aggiungere una virgoletta singola ad entrambe le estremità dei pass per verificare la funzione come mostrato di seguito.

javascript:check('WANT TO PUT TEXTBOX VALUE HERE'); 
+1

Il testo da verificare non è il testo in maiuscolo ma il valore di una casella di controllo ... :-) –

+0

Sì, questo è @SamuelCaillerie, grazie. – anmarti

+0

errore mio, grazie per avermi corretto – Ravia

1

Hai diversi approcci.

Primo approccio:

function sayHello(obj){ 
    alert(obj.id + " says 'Hello!'"); 
}; 

<asp:Button runat="server" ID="btnApproach1" OnClientClick="sayHello(this)" 
Text="Say Hello" /> 

Questa passerà il controllo Button (in realtà, solo un elemento <input) alla funzione e quindi è possibile lavorare su di esso tuttavia si prega.

Secondo approccio:

function checkValue(e) { 

    //If it has a target, use it. Otherwise, use srcElement (for IE) 
    var ctrl = e.target || e.srcElement; 

    //Do whatever you need to with the text, no button necessary. 

}; 

function bindEvent(ctrl, event, handler, propagates) { 
    if (ctrl.addEventListener) { 
     ctrl.addEventListener(event, handler, propagates); 
    } 
    else { 
     ctrl.attachEvent("on" + event, handler); 
    } 
}; 

window.onload = function() { 

var myCtrl = document.getElementById('<%=txtToValidate.ClientID%>'); 

bindEvent(myCtrl, "keydown", checkValue, false); 

}; 

<asp:Button runat="server" ID="btnApproach2" Text="Say Hello" /> 

Qui, si vincolano gli eventi ai controlli dietro le quinte (preferibile) e la rimozione di quella logica dal vostro livello di presentazione (il tuo aspx).

Entrambi gli approcci funzioneranno, ma suggerirei di andare con l'opzione numero due per la separazione delle preoccupazioni.

Problemi correlati