none
Seite vor verlassen nach änderung prüfen RRS feed

  • Frage

  • Hallo zusammen,

    Problem: wenn user Inhalte z.B. textfelder ändern und die Seite verlassen möchten ohne die Änderung zu speichern,

    möchte ich Sie daruf hinweisen, dass Sie die Änderung nicht gespeichert haben.

    folgender JavaScript habe ich bei mir angepasst

    http://www.d-mueller.de/blog/aenderungen-einer-form-ueberwachen/ 

    nun habe ich problem mit dem Speichern-Button, jedes mal wenn der user speichern clickt, kommt die Meldung "wollen Sie die Seite Wirklic....."

    ich möchte die meldung für buttons unterdrucken

    ansatz:

    $('form').bind('submit', function() {

    window.onbeforeunload = function(e) {}

    });

    geht leider nicht!!

    Beste Grüsse

    Lubb


    • Bearbeitet lubb Donnerstag, 15. März 2012 14:46
    Donnerstag, 15. März 2012 14:43

Antworten

  • Guten Morgen,

    Die Komplete Lösung wäre:

    <script type="text/javascript">
      var ids = new Array('textbox', 'select-one', 'textarea'  );                   
    
                                                
      var values = new Array();
      
      function populateArrays()
      {
        // assign the default values to the items in the values array
        for (var i = 0; i < ids.length; i++)
        {
          var elem = document.getElementById(ids[i]);
          if (elem)
          {
            if (elem.type == 'select-one')
              values[i] = elem.selectedIndex ;
            else if( elem.type == 'text' || elem.type == 'textarea')
              values[i] = elem.value;
          }
        } 
      }
    
      var needToConfirm = true;
      
      window.onbeforeunload   = confirmExit;
    
      function confirmExit()
      {
        if (needToConfirm)
        {    
          populateArrays();    
       
          // check to see if any changes to the data entry fields have been made
          for (var i = 0; i < values.length; i++)
          {      
            var elem = document.getElementById(ids[i]);
            if (elem)
            {
              if (elem.type == 'select-one') 
              {
               if (checkDLLValue(elem))
                 return "Wollen Sie die Seite wirklich verlassen, ohne die Änderungen zu speichern?";           
              }
              if ((elem.type == 'text') && elem.defaultValue != values[i])//elem.defaultValue )
              {
    //               alert(elem.defaultValue + ' , ' + values[i]);
                   return "Wollen Sie die Seite wirklich verlassen, ohne die Änderungen zu speichern?";
              }
              else if ((elem.type == 'textarea') && elem.defaultValue != values[i])//elem.defaultValue )
              {
    //              alert(elem.defaultValue + ' , ' + values[i]);
                  return "Wollen Sie die Seite wirklich verlassen, ohne die Änderungen zu speichern?";
              }
             }  
          }
          // no changes - return nothing      
        }
      }
      
      
      
    function checkDLLValue(oSelect) {
        var def;
        for (var i=0; i<oSelect.options.length; ++i) //loop through select options
        if (oSelect.options[i].defaultSelected){ //this option's defaultSelected property is set to true (from HTML: selected="selected")
            def = oSelect[i].text; //or .value
        }
        var sel;
        sel = oSelect[oSelect.selectedIndex].text;
        if (sel != def)
        {
            alert (sel + ' : ' + def);
            return true;
        }
    }
    
      
    </script>  
    

    Beste Grüsse

    Lubb


    • Bearbeitet lubb Freitag, 23. März 2012 07:54
    • Als Antwort markiert lubb Freitag, 23. März 2012 07:54
    Freitag, 23. März 2012 07:53

Alle Antworten

  • hallo Leute

    habe den code geändert, so kann ich genau bestimmen, welche felder gepruft und welche nicht:

    <script type="text/javascript">
      var ids = new Array('ctl00_ContentPlaceHolderContent_X, 'ctl00_ContentPlaceHolderContent_Y');
                          
    //  var ids = new Array('tbX', 'tbY');
                                                
      var values = new Array('', '');
      
      function populateArrays()
      {
        // assign the default values to the items in the values array
        for (var i = 0; i < ids.length; i++)
        {
    //      var elem = document.getElementById(ids[i]);
       var elem = document.getElementById(ids[i]);
          if (elem)
            if (elem.type == 'checkbox' || elem.type == 'radio')
              values[i] = elem.checked;
            else
              values[i] = elem.value;
        }      
      }
    
      var needToConfirm = true;
      
      window.onbeforeunload = confirmExit;
      function confirmExit()
      {
        if (needToConfirm)
        {
        populateArrays();
        
       
          // check to see if any changes to the data entry fields have been made
          for (var i = 0; i < values.length; i++)
          {
     
           var id = ids[0]+'.ClientID';
          
            var elem = document.getElementById(ids[i]);
            
            if (elem)
              if (elem.type == 'select-one') 
              {
                for (var ii = 0; ii < elem.options.length; ii++)
                {
                    if (elem.options[ii].selected != elem.options[ii].defaultSelected)
                        return "Wollen Sie die Seite wirklich verlassen, ohne die Änderungen zu speichern?";
                }
              }
              else if ((elem.type == 'text') && elem.value != elem.defaultValue )
                return "Wollen Sie die Seite wirklich verlassen, ohne die Änderungen zu speichern?";
              else if ((elem.type == 'textarea') && elem.value != elem.defaultValue )
                return "Wollen Sie die Seite wirklich verlassen, ohne die Änderungen zu speichern?";
                
          }
    
          // no changes - return nothing      
        }
      }
    </script>  

    Problem wie kann ich per Javascript die Client ID der Controlls an hand der asp.net ID

    anstatt: var elem = document.getElementById(ids[i]);

    folgendes:

    var ids = new Array('tbX', 'tbY');

    var elem = document.getElementById(ids[i].ClinetID);

    Freitag, 16. März 2012 10:59
  • Guten Morgen,

    Die Komplete Lösung wäre:

    <script type="text/javascript">
      var ids = new Array('textbox', 'select-one', 'textarea'  );                   
    
                                                
      var values = new Array();
      
      function populateArrays()
      {
        // assign the default values to the items in the values array
        for (var i = 0; i < ids.length; i++)
        {
          var elem = document.getElementById(ids[i]);
          if (elem)
          {
            if (elem.type == 'select-one')
              values[i] = elem.selectedIndex ;
            else if( elem.type == 'text' || elem.type == 'textarea')
              values[i] = elem.value;
          }
        } 
      }
    
      var needToConfirm = true;
      
      window.onbeforeunload   = confirmExit;
    
      function confirmExit()
      {
        if (needToConfirm)
        {    
          populateArrays();    
       
          // check to see if any changes to the data entry fields have been made
          for (var i = 0; i < values.length; i++)
          {      
            var elem = document.getElementById(ids[i]);
            if (elem)
            {
              if (elem.type == 'select-one') 
              {
               if (checkDLLValue(elem))
                 return "Wollen Sie die Seite wirklich verlassen, ohne die Änderungen zu speichern?";           
              }
              if ((elem.type == 'text') && elem.defaultValue != values[i])//elem.defaultValue )
              {
    //               alert(elem.defaultValue + ' , ' + values[i]);
                   return "Wollen Sie die Seite wirklich verlassen, ohne die Änderungen zu speichern?";
              }
              else if ((elem.type == 'textarea') && elem.defaultValue != values[i])//elem.defaultValue )
              {
    //              alert(elem.defaultValue + ' , ' + values[i]);
                  return "Wollen Sie die Seite wirklich verlassen, ohne die Änderungen zu speichern?";
              }
             }  
          }
          // no changes - return nothing      
        }
      }
      
      
      
    function checkDLLValue(oSelect) {
        var def;
        for (var i=0; i<oSelect.options.length; ++i) //loop through select options
        if (oSelect.options[i].defaultSelected){ //this option's defaultSelected property is set to true (from HTML: selected="selected")
            def = oSelect[i].text; //or .value
        }
        var sel;
        sel = oSelect[oSelect.selectedIndex].text;
        if (sel != def)
        {
            alert (sel + ' : ' + def);
            return true;
        }
    }
    
      
    </script>  
    

    Beste Grüsse

    Lubb


    • Bearbeitet lubb Freitag, 23. März 2012 07:54
    • Als Antwort markiert lubb Freitag, 23. März 2012 07:54
    Freitag, 23. März 2012 07:53