566 messaggi dal 27 dicembre 2005
Vorrei bloccare la form soltanto cliccando un bottone e non ad ogni postback.

Utilizzo questo codice ma la form si blocca solo una volta, dove sbaglio ?

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">

    <script src="Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
    <script src="Scripts/jquery.blockUI.js" type="text/javascript"></script>

   <script type="text/javascript">

       // unblock when ajax activity stops
       //              $(document).ajaxStop($.unblockUI);

     
      
      
       $(document).ready(function () {
           $('#Button1').click(function () {
               $.blockUI({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' });

           });

         

           Sys.WebForms.PageRequestManager.getInstance().add_endRequest($.unblockUI);


//           // Get a reference to the PageRequestManager.
//           var prm = Sys.WebForms.PageRequestManager.getInstance();

//           prm.add_endRequest(function () {
//               // Unblock the form when a partial postback ends.
//               
//               $.unblockUI();
//           });



       });


       
 
</script> 



</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <h2>
        ASP.NET
    </h2>
    <p>
        &nbsp;<asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
        <asp:Button ID="Button1" runat="server" Text="Button" ClientIDMode="Static" 
                UseSubmitBehavior="False" />
        </ContentTemplate>
        </asp:UpdatePanel>

      <%--  <asp:Button ID="Button1" runat="server" Text="Button" ClientIDMode="Static" />--%>
        
    </p>
    <p>
        È inoltre disponibile f="http://go.microsoft.com/fwlink/?LinkID=152368"
            title="MSDN ASP.NET Docs">documentazione relativa ad ASP.NET su MSDN</a>.
    </p>
</asp:Content>
5.390 messaggi dal 09 febbraio 2002
Contributi
ciao,
nel momento l'UpdatePanel viene aggiornato, tutto il suo contenuto viene distrutto, compreso il Button1, e poi viene ri-riempito con del markup "fresco", contenente un nuovo Button1.

Quindi, il Button1 originale, quello di cui avevi gestito l'evento click, non esiste più ma ne esiste una nuova versione che se cliccata non eseguirà nulla.

La soluzione è quella di non usare il metodo .click per gestire l'evento del bottone ma il metodo .live o, dato che usi la recente versione 1.7 di jQuery, il metodo .on.

Questi due infatti si accorgeranno dei cambiamenti apportati al DOM e ri-sottoscriveranno automaticamente l'evento click nel momento in cui un nuovo Button1 entra nel documento.

// questa riga eliminala
// $('#Button1').click(function () {
// invece usa questa
$(document).on("click", "#Button1", function () {


L'utilizzo del metodo .on lo trovi descritto anche in questo articolo di Marco De Sanctis.
http://www.html5italia.com/focuson/1256/JQuery-Raggiunge-Versione-1.7.aspx

ciao
Modificato da BrightSoul il 24 gennaio 2012 20.57 -

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
566 messaggi dal 27 dicembre 2005
Intanto ti ringrazio per l'aiuto, e ho imparato una funzione nuova.

Adesso cosi funziona,ma al termine della richiesta non riesco a sbloccare l'interfaccia

<script type="text/javascript">
  $(document).on("click", "#Button1", function () { $.blockUI({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' }); });

 var prm = Sys.WebForms.PageRequestManager.getInstance();

           prm.add_endRequest(function () {
               // Unblock the form when a partial postback ends.
               $.unblockUI();
           }); 

</script> 



Ne aprofitto... un buon libro in italiano per Jquery ?
5.390 messaggi dal 09 febbraio 2002
Contributi
uhm, non riesco a riprodurre il problema. Con questo codice vedo che l'avviso appare correttamente al click e scompare subito dopo.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script src="http://jquery.malsup.com/block/jquery.blockUI.js?v2.38"></script>
<script type="text/javascript">
       $(document).ready(function () {
           $(document).on("click", "#Button1", function () {
               $.blockUI({ message: '<h1>Just a moment...</h1>' });
           });
       });
       var prm = Sys.WebForms.PageRequestManager.getInstance();
       prm.add_endRequest(function () {
           $.unblockUI();
       });
</script> 
A proposito... sei sicuro di voler usare blockUI? Appare e scompare così rapidamente che fa male agli occhi. Non vorresti usare il controllo UpdateProgress che magari è più discreto?


Ne aprofitto... un buon libro in italiano per Jquery ?

Non saprei dire... cerca in famoso-sito-di-libri, là trovi delle recensioni. Io finora ho usato la documentazione che è su jquery.com, ben scritta e commentata dagli utenti.

ciao :)
Modificato da BrightSoul il 25 gennaio 2012 22.40 -

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
566 messaggi dal 27 dicembre 2005
Allora per l'esempio riportato da me hai aggiunto un updatapanel e scriptmanager ?

Io prima usavo l'updataprogress, solo che per operazioni brevi va bene, ma per quelle lunghe non bloccando l' UI e facendo vedere solo un messaggio,c'è il pericolo che l'utente clicchi altri bottoni.
Con il blockUi invece viene bloccato tutto fino a fine richiesta.

Cmq ho anche risolto mettendo il blockUI e UnblockUI nella proprietà onclientclick del bottone.

Riepilogando se ho capito bene , se non si usa un updatapanel basta mettere tutto il codice in uno script, altrimenti o si usa l'evento onclientclick dei controlli, oppure si usa il nuovo evento "on" di Jquery.

Una curiosità, questo evento "ON" forza la creazione dell' evento ad ogni postback, anche parziale ?
5.390 messaggi dal 09 febbraio 2002
Contributi
totti240282 ha scritto:

Allora per l'esempio riportato da me hai aggiunto un updatapanel e scriptmanager ?

sì, li avevo aggiunti... nell'esempio avevo solo incollato i vari tag <script> tralasciando il resto :P

totti240282 ha scritto:

o si usa l'evento onclientclick dei controlli, oppure si usa il nuovo evento "on" di Jquery.

Sì, entrambi i modi ti permettono di legare una funzione javascript che verrà eseguita al click del bottone. Questo è vero anche per i bottoni che vengono "rigenerati" dopo il postback parziale di un UpdatePanel.

totti240282 ha scritto:

Una curiosità, questo evento "ON" forza la creazione dell' evento ad ogni postback, anche parziale ?

Si può dire che il metodo .on("click", ...) vada a "sottoscrivere" l'evento click dell'elemento nel momento stesso in cui entra nel DOM.
L' "entrata nel DOM" si può verificare in vari modi, certamente con un postback parziale o totale ma anche con un javascript che, senza effettuare chiamate ajax, genera esso stesso l'html del bottone e lo inserisce in un contenitore (div o altro) presente nella pagina. Esempio:
var nuovoBottone = $("<input type=\"button\" id=\"Button1\" value=\"Clicca\" />");
$("#contenitore").append(nuovoBottone);

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
566 messaggi dal 27 dicembre 2005
BrightSoul ha scritto:
totti240282 ha scritto:

Allora per l'esempio riportato da me hai aggiunto un updatapanel e scriptmanager ?

sì, li avevo aggiunti... nell'esempio avevo solo incollato i vari tag <script> tralasciando il resto :P

totti240282 ha scritto:

o si usa l'evento onclientclick dei controlli, oppure si usa il nuovo evento "on" di Jquery.

Sì, entrambi i modi ti permettono di legare una funzione javascript che verrà eseguita al click del bottone. Questo è vero anche per i bottoni che vengono "rigenerati" dopo il postback parziale di un UpdatePanel.

totti240282 ha scritto:

Una curiosità, questo evento "ON" forza la creazione dell' evento ad ogni postback, anche parziale ?

Si può dire che il metodo .on("click", ...) vada a "sottoscrivere" l'evento click dell'elemento nel momento stesso in cui entra nel DOM.
L' "entrata nel DOM" si può verificare in vari modi, certamente con un postback parziale o totale ma anche con un javascript che, senza effettuare chiamate ajax, genera esso stesso l'html del bottone e lo inserisce in un contenitore (div o altro) presente nella pagina. Esempio:
var nuovoBottone = $("<input type=\"button\" id=\"Button1\" value=\"Clicca\" />");
$("#contenitore").append(nuovoBottone);

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.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC