evento on submit preventDefault no funciona

Iniciado por gAb1, 17 Junio 2016, 21:44 PM

0 Miembros y 1 Visitante están viendo este tema.

gAb1

Estoy usando un plugin jquery llamado formly para verificar los campos antes de mandarlos. El problema es que el evento on submit (dentro del plugin) no detiene el submit y el formulario se sigue enviando de todas formas...

Código (javascript) [Seleccionar]
(function($) {

$.fn.formly = function(callback) {

    // Submit button
    this.on('submit', function(e) {

        // NOT WORKING AT ALL...
        e.preventDefault();
        var canSubmit = true;

        $(this).find('input').each(function() {

            // Required
            if ($(this).attr('required')) {
                canSubmit = functions.required(this);
            }

            // Validate
            if ($(this).attr('validate')) {
                canSubmit = functions.validate(this);
            }

            // Match
            if ($(this).attr('match')) {
                canSubmit = functions.match(this);
            }

        });

        if (canSubmit) {
            if (callback) {

                var clientInfo = $(this).serializeArray();

                /* Password hash function */
                var p = $('#reg_pwd').val(),
                    c = $('#confirm_pwd').val(),
                    shaObj = new jsSHA('SHA-512', 'TEXT');

                shaObj.update(p);
                var p_hash = shaObj.getHash("HEX"),
                    shaObj = new jsSHA('SHA-512', 'TEXT');

                shaObj.update(c);
                var c_hash = shaObj.getHash("HEX");

                callback(clientInfo, p_hash, c_hash);
            }
        }

    });


En mi archivo scripts.js llamo al plugin y pongo el callback que es el que debería enviar el formulario (dropzone se tiene que encargar de esto, junto a la imagen):

Código (javascript) [Seleccionar]
        $('#register').formly(function(clientInfo, p_hash, c_hash) {

            Dropzone.autoDiscover = false;
            $('#myDropzone').dropzone({
                init: function() {
                    var myDropzone = this

                    myDropzone.processQueue();

                    myDropzone.on('sending', function(data, xhr, formData) {
                        formData.append('client_info', clientInfo);
                        formData.append('reg_pwd', p_hash),
                        formData.append('confirm_pwd', c_hash);
                        console.log('I just sended the info...');
                    });

                    myDropzone.on('success', function(file, response) {
                        myDropzone.removeFile(file);
                        response == '' ? window.location.replace('//admin.inmopaco.tk/') : alert('success_' + response);
                    });
                }
            });

        });


Para poco, dropzone me da error diciendo que ya esta inicializado... y no se sube nada. Dropzone lo tengo que inicializar fuera de formly y luego dentro tengo que procesar el queue y enviar el formulario. ¿Como prodría hacer esto sin reinicializar dropzone para que no de error?

¿Y para evitar que el formulario se envie al darle al boton? Tiene que ser dropzone el que envie el array y los hashes.

Gracias!

engel lex

la forma mas facil de prevenir el submit es retornar false al final del callback
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

gAb1

#2
Sigue sin funcionar... y es muy raro, tengo otros scripts en el mismo archivo con un evento click y haciendo preventDefault y si que funcionan. Pero este caso es ligeramente distinto.

De todas maneras, la finalidad del script es evitar el submit (siempre en todo momento ya que se envia por ajax) y comprobar que los campos pasen los controles. Si se ejecuta el callback es porque todo está bien, pero veo mensajes (del plugin) cuando se ejecuta el submit (de los select)...

Esto quiere decir que el formulario no se envia porque html5 required lo cancela (o no lo deja iniciar), y no porque el on submit lo detenga... Entonces en cuanto los required se rellenan el submit se ejecuta, pero no debería!

¿Alguna idea de porqué ocurre esto?


Edito: He probado poniendo return false en el callback y en el on submit. No consigo hacer que no se envie el submit... debe haber algo en alguna parte...  :-\

Edito 2: Que le den al submit, uso un elemento <a> y dejo de complicarme ya la vida  :laugh: