Динамическая форма нескольких мест отправка с JavaScript - PullRequest
0 голосов
/ 08 июля 2010

Я пытаюсь написать JavaScript для своего веб-сайта, который выберет все формы на странице, добавит прослушиватель событий при их отправке, а затем направит значения, отправленные, на главную страницу действий и дополнительную альтернативную страницу.,

Вот что у меня есть:

Send.php:

<script type="text/javascript">


    function post_to_url(path, params, method) {
        method = method || "post"; // Set method to post by default, if not specified.

        // The rest of this code assumes you are not using a library.
        // It can be made less wordy if you use one.
        var form = document.createElement("form");
        form.setAttribute("method", method);
        form.setAttribute("action", path);

        for(var key in params) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
        }

        document.body.appendChild(form);    // Not entirely sure if this is necessary
        form.submit();
    }

    function addEvent(elm, evType, fn, useCapture) {
        if (elm.addEventListener) {
            elm.addEventListener(evType, fn, useCapture);
            return true;
        }
        else if (elm.attachEvent) {
            var r = elm.attachEvent('on' + evType, fn);
            return r;
        }
        else {
            elm['on' + evType] = fn;
        }
    }

    function addLoadEvent(func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        }
        else {
            window.onload = function() {
                oldonload();
                func();
            }
        }
    }

    function addSubmits() {
        var fs=document.forms;
        for(var i=0;i<fs.length;i++){
            //addEvent(fs[i],"submit",post_to_url('http://www.gwtwg.com/recieve.php', {'email' : 'test.com'}), false)
        }
    }

    addLoadEvent(addSubmits);
</script>

<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
    <input type="text" name="email" />
    <input type="submit" value="Submit!" />
</form>

Сейчас скрипт просто зависает, но если я заменю: "post_to_url ('http://www.gwtwg.com/recieve.php', {' email ':' test.com '})" with: "alert (" foobar ")"

Я получаю предупреждение, когда загружаю страницу икогда форма отправлена.(Это должно происходить только при отправке кнопки).

Есть мысли о том, что не так?

1 Ответ

1 голос
/ 09 июля 2010

Итак, проблема в том, что вы на самом деле не используете библиотеку JS.Лично я бы порекомендовал вам использовать jQuery, но любой из основных будет работать.Все показанные вами функции имеют более надежные эквиваленты в различных библиотеках JS, поэтому глупо пытаться отлаживать их, если вы можете просто заменить их на более проверенные, более надежные версии бесплатно.

Если выиспользовали jQuery, вот как (я думаю) вы могли бы делать то, что вы хотите сделать:

var URL = "http://www.gwtwg.com/recieve.php"; // Define your site's URL
$(function() { // setup an onReady (similar to onLoad) handler
    $("form") // get all forms on the page
        .submit(function() { // hook up an onSubmit handler to them
            var params = $(this).serialize(); // get this form's data
            $.post(URL, paprams);// POST the data your server
      });
});

Теперь я на самом деле не проверял ничего из этого, но он должен работать (и даже если этоТ, надеюсь, вы поняли)Кроме того, обратите внимание, насколько он короче?Еще одно преимущество.Однако важно то, что если вы используете установленный код, который был проверен сотнями глазных яблок, вы не будете тратить время на повторное изобретение колеса.Кроме того, что еще более важно, вы не будете тратить время на то, чтобы просить людей в Интернете помочь вам отладить вашу версию этого колеса; -)

...