Niniejszy kod powraca "REIDERECECROR: Praca nie jest zdefiniowana" po kliknięciu przycisku Prześlij i nie znalazłem dlaczego. (Używam również Cakepphp) Moim pomysłem jest utworzenie obiektu walidatora, tworzenie funkcji w nim funkcje, a następnie instancji i używania go.

HTML:

<html>
<head>
    <script>
    <?php echo $this->Html->script('validate'); ?>
    </script>
</head>
    <body>
    <br>
    <br>
    <br>
    <br>
        <form name="form" action="mailtest.php" method="post">
            name <input type="text" name="name">
            mail <input type="text" name="mail">
            comment <input type="text" name="comment">
            <input type="button" name="button" value="click" 
            onClick="work(this.form)">
        </form>
    </body>
</html>

JavaScript:

var validator = function() {

    var name;
    name = form.name.value;
    var mail;
    mail = form.mail.value;
    var comment;
    comment = form.comment.value;

    validate: function()
    {

        form.name.value = "NO!";
    }

}

function work(form)
{
    v = new validator();
    v.validate();
}
0
Mariano 13 sierpień 2014, 21:56

3 odpowiedzi

Najlepsza odpowiedź

Problem polegał na tym, że w tym przypadku (dziwne) CakePhp nie rozpoznał pliku, dzwoniąc do niego z Echo $ this-> HTML-> skrypt (walidate); Musiałem więc użyć walidate.js .....

0
Mariano 15 sierpień 2014, 18:29

Jeśli zmienisz funkcję walidatora do następującego błędu znika

var validator = function() {

var name;
name = form.name.value;
var mail;
mail = form.mail.value;
var comment;
comment = form.comment.value;

this.validate = function()
{

    form.name.value = "NO!";
}

}

0
Afsa 13 sierpień 2014, 18:51

Po pierwsze, sprawdź swoją składnię, że nie jest ważny. Nie można ustawić właściwości do funkcji, jak robisz z validate: function() {...}. Po drugie, nie ścieżka this.work do walidacyjnego, więc nie zostanie to zdefiniowane w niej. Po trzecie, nie jestem pewien, że to dobry pomysł, aby utworzyć nową instancję obróżtu przy każdym kliknięciu przycisku. Dlaczego nie używaj tutaj prostej funkcji?

<head>
    <script>
        function validate(form) {

            var name = form.name.value,
                mail = form.mail.value,
                comment = form.comment.value;

            form.name.value = "NO!";


        };

        function work(form) {
            validate(form);
        }
    </script>
</head>

<body>
    <br>
    <br>
    <br>
    <br>
    <form name="form" action="mailtest.php" method="post">name
        <input type="text" name="name">mail
        <input type="text" name="mail">comment
        <input type="text" name="comment">
        <input type="button" name="button" value="click" onClick="work(this.form)">
    </form>
</body>

Ponadto, jeśli chcesz chcieć zrozumieć obiekty w JS (może być trudne), a ty, polecam, że przeczytałem te dwa posty blogowe: Obiekty JavaScript w szczegółach i OOP w JavaScript: Co musisz znać.

0
Elena 13 sierpień 2014, 19:32