Autor Zpráva
Cuketa
Profil
Zdravím,
potřevobal bych prosím pomoci s následujícím problémem. Mám zde skriptík pro kontrolu správně zadaných údajů ve formuláři a další pro jeho výmaz po odeslání. V případě odeslání špatně vyplněného formuláře se zobrazí chybová hlášení, ale skript pro výmaz všechny vyplněné údaje smaže. Potřebuji, aby se formulář po odeslání vymazal až po zadání správných údajů.

Předem děkují za případné rady.

Zde jsou zdrojové kódy:

HTML formulář:
<form method="post" action="odesli.php" name="odeslat" onSubmit="vymaz(id)">
<table>
<tr><td>Jméno: </td><td><input type="text" name="jmeno" class="jmeno" value=""></td><td id="jmeno" style="color: red;"></td></tr>
<tr><td>Příjmení: </td><td><input type="text" name="prijmeni" class="prijmeni" value=""></td><td id="prijmeni" style="color: red;"></td></tr>
<tr><td>E-mail: </td><td><input type="text" name="mail" class="email" value=""></td><td id="email" style="color: red;"></td></tr>
<tr><td>Telefon: </td><td><input type="text" name="telefon" class="telefon" value=""></td><td id="telefon" style="color: red;"></td></tr>
<tr><td colspan="3"><input type="submit" name="odesli" value="Odeslat" ></td></tr>
</table>
</form>

Javascript pro výmaz formuláře
function vymaz(id) {
    df=document.forms[0];
    clearForm(df);
    document.MyForm.onsubmit=function() {
    return clearForm(df);
      }
    }
    function clearForm(df){
    setTimeout('df.reset()',100);
    return true;
    }

Javascript pro ověření vyplněných údajů
var FormValidation =
{
  init: function()
  {
    var forms = document.getElementsByTagName("form");
    
    for (var i = 0; i < forms.length; i++)
    {
      Core.addEventListener(forms[i], "submit", FormValidation.submitListener);
    }
  },

  rules:
  {
    jmeno: /^[a-zA-Z]+$/,
    prijmeni: /^[a-zA-Z]+$/,
    email: /^[_a-zA-Z0-9.-]+@[_a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/,
    telefon: /^\+?[0-9]{9,12}$/
  },

  errors:
  {
    jmeno: "Vyplňte prosím Vaše jméno ve správném tvaru např. Jan",
    prijmeni: "Vyplňte prosím Vaše jméno ve správném tvaru např: Novák",
    email: "Vyplňte prosím Vaši e-mailovou adresu ve správném tvaru např. jan.novak@email.cz",
    telefon: "Vyplňte prosím Vaše tel. číslo ve správném tvaru např. 123456789 nebo +420123456789."
  },
  
  submitListener: function(event)
  {
    var fields = this.elements;
    
    for (var i = 0; i < fields.length; i++)
    {
      var className = fields[i].className;
      var classRegExp = /(^| )(\S+)( |$)/g;
      var classResult;
      
      while (classResult = classRegExp.exec(className))
      {
        var oneClass = classResult[2];
        var rule = FormValidation.rules[oneClass];
        if (typeof rule != "undefined")
        {
          if (!rule.test(fields[i].value))
          {
            fields[i].focus();
            document.getElementById(oneClass).innerHTML=(FormValidation.errors[oneClass]);
            Core.preventDefault(event);
            
          } 
        }
      }
    }
  }
};
Core.start(FormValidation);

Javascriptový soubor Core.js pro správnou funkčnost ověřovacího skriptu.
var Core = {};

if (document.addEventListener)
{
  Core.addEventListener = function(target, type, listener)
  {
    target.addEventListener(type, listener, false);
  };

  Core.removeEventListener = function(target, type, listener)
  {
    target.removeEventListener(type, listener, false);
  };

  Core.preventDefault = function(event)
  {
    event.preventDefault();
  };

  Core.stopPropagation = function(event)
  {
    event.stopPropagation();
  };
}
else if (document.attachEvent)
{
  Core.addEventListener = function(target, type, listener)
  {

    if (Core._findListener(target, type, listener) != -1) return;

    var listener2 = function()
    {
      var event = window.event;

      if (Function.prototype.call)
      {
        listener.call(target, event);
      }
      else
      {
        target._currentListener = listener;
        target._currentListener(event)
        target._currentListener = null;
      }
    };

    target.attachEvent("on" + type, listener2);


    var listenerRecord =
    {
      target: target,
      type: type,
      listener: listener,
      listener2: listener2
    };

    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    var listenerId = "l" + Core._listenerCounter++;

    if (!targetWindow._allListeners) targetWindow._allListeners = {};
    targetWindow._allListeners[listenerId] = listenerRecord;

    if (!target._listeners) target._listeners = [];
    target._listeners[target._listeners.length] = listenerId;

    if (!targetWindow._unloadListenerAdded)
    {
      targetWindow._unloadListenerAdded = true;
      targetWindow.attachEvent("onunload", Core._removeAllListeners);
    }
  };

  Core.removeEventListener = function(target, type, listener)
  {
    var listenerIndex = Core._findListener(target, type, listener);
    if (listenerIndex == -1) return;

    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    var listenerId = target._listeners[listenerIndex];
    var listenerRecord = targetWindow._allListeners[listenerId];

    target.detachEvent("on" + type, listenerRecord.listener2);
    target._listeners.splice(listenerIndex, 1);

    delete targetWindow._allListeners[listenerId];
  };

  Core.preventDefault = function(event)
  {
    event.returnValue = false;
  };

  Core.stopPropagation = function(event)
  {
    event.cancelBubble = true;
  };

  Core._findListener = function(target, type, listener)
  {
    var listeners = target._listeners;
    if (!listeners) return -1;
    
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    for (var i = listeners.length - 1; i >= 0; i--)
    {
      var listenerId = listeners[i];

      var listenerRecord = targetWindow._allListeners[listenerId];

      if (listenerRecord.type == type && listenerRecord.listener == listener)
      {
        return i;
      }
    }
    return -1;
  };

  Core._removeAllListeners = function()
  {
    var targetWindow = this;

    for (id in targetWindow._allListeners)
    {
      var listenerRecord = targetWindow._allListeners[id];
      listenerRecord.target.detachEvent(
          "on" + listenerRecord.type, listenerRecord.listener2);
      delete targetWindow._allListeners[id];
    }
  };

  Core._listenerCounter = 0;
}
Core.addClass = function(target, theClass)
{
  if (!Core.hasClass(target, theClass))
  {
    if (target.className == "")
    {
      target.className = theClass;
    }
    else
    {
      target.className += " " + theClass;
    }
  }
};

Core.getElementsByClass = function(theClass)
{
  var elementArray = [];

  if (document.all)
  {
    elementArray = document.all;
  }
  else
  {
    elementArray = document.getElementsByTagName("*");
  }

  var matchedArray = [];
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  for (var i = 0; i < elementArray.length; i++)
  {
    if (pattern.test(elementArray[i].className))
    {
      matchedArray[matchedArray.length] = elementArray[i];
    }
  }
  return matchedArray;
};

Core.hasClass = function(target, theClass)
{
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  if (pattern.test(target.className))
  {
    return true;
  }

  return false;
};

Core.removeClass = function(target, theClass)
{
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  target.className = target.className.replace(pattern, "$1");
  target.className = target.className.replace(/ $/, "");
};

Core.getComputedStyle = function(element, styleProperty)
{
  var computedStyle = null;

  if (typeof element.currentStyle != "undefined")
  {
    computedStyle = element.currentStyle;
  }
  else
  {
    computedStyle = document.defaultView.getComputedStyle(element, null);
  }

  return computedStyle[styleProperty];
};

Core.start = function(runnable)
{
  Core.addEventListener(window, "load", runnable.init);
};
nevimco
Profil *
Dobrý den,
myslím si, že je chyba zde:
 document.MyForm.onsubmit=function() {
    return clearForm(df);
      }
Funkce OnSubmit se volá vždy po kliknutí na tlačítko submit (Odeslat).
Na vašem místě bych nejdříve nechal provést kontrolu, a při vrácení záporného výsledku funkci na mazání neprováděl (jednoduchý IF).

Pokud jsem špatně pochopil otázku tak se omlouvám ...
Cuketa
Profil
Otázku jste pochopil dobře, jenomže zatím jsem se nedopídil správného výsledku. :-(

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: