heinetz: Funktionsaufruf auslagern?

Hallo Forum,

ich weiss nicht, wie ich das anders nennen soll. Daher versuche ich's direkt anhand des Codes zu beschreiben.

	var validator = $("form").validate({
		submitHandler: function(form) {
		  $(form).ajaxSubmit({
		  	beforeSubmit: function(arr, $form, options){
		  		$(':input', $(form).addClass('submit'))
		  		.attr('disabled', true);
		  	}  	
		  });
		},
	});

Ich möchte einen Teil auslagern, um ihn wieder zu verwenden …

Das war mein erster Versuch:

	var options = {
		submitHandler: function(form) {
		  $(form).ajaxSubmit({
		  	beforeSubmit: function(arr, $form, options){
		  		$(':input', $(form).addClass('submit'))
		  		.attr('disabled', true);
		  	}  	
		  });
		},
	};
	var validator = $("form").validate(options);

Das ging nicht, also habe ich versucht, mich ganz leise da ranzutasten:

	var myfunction = function(arr, $form, options){
		$(':input', $(form).addClass('submit'))
		.attr('disabled', true);
	};

	var validator = $("form").validate({
		submitHandler: function(form) {
		  $(form).ajaxSubmit({
		  	beforeSubmit: myfunction(arr, $form, options)  	
		  });
		},
	});

Das Problem scheint zu sein, dass in myfunction die Argumente arr, $form, options nicht ankommen.

Was mache ich falsch?

1000Dank für Tipps und

beste gruesse, heinetz

  1. Moin!

    Das Problem scheint zu sein, dass in myfunction die Argumente arr, $form, options nicht ankommen.

    Notiere:

    myfunction(a, b, c) {
      alert(a);
      alert(b);
      alert(c);
    }
    

    (oder ersetze alert durch console.log)

    und schon musst Du Dich auf den An-Schein nicht mehr verlassen.

    Jörg Reinholz

  2. 	var options = {
    		submitHandler: function(form) {
    		  $(form).ajaxSubmit({
    		  	beforeSubmit: function(arr, $form, options){
    		  		$(':input', $(form).addClass('submit'))
    		  		.attr('disabled', true);
    		  	}  	
    		  });
    		},
    	};
    	var validator = $("form").validate(options);
    

    Das ging nicht, also habe ich versucht, mich ganz leise da ranzutasten:

    Dieser erste Versuch macht auf mich einen korrekten Eindruck, was funktionierte denn daran nicht? Gab es eine Fehlermeldung? Rantasten ist schon Mal eine gute Idee, aber besser methodisch mit Step Through Debugging als mit Trial and Error.

    	var myfunction = function(arr, $form, options){
    		$(':input', $(form).addClass('submit'))
    		.attr('disabled', true);
    	};
    
    	var validator = $("form").validate({
    		submitHandler: function(form) {
    		  $(form).ajaxSubmit({
    		  	beforeSubmit: myfunction(arr, $form, options)  	
    		  });
    		},
    	});
    

    Das Problem scheint zu sein, dass in myfunction die Argumente arr, $form, options nicht ankommen.

    Was mache ich falsch?

    Du rufst die Funktion myfunction auf eigene Faust auf anstatt sie als Callback-Funktion zu registrieren und sie dann automatisch von jQuery aufrufen zu lassen.

    Was ist das eigentlich für ein Plugin, dass die Methoden validate und ajaxSubmit zur Verfügung stellt?

    1. Verstanden habe ich nicht, was Ihr mir sagen wolltet.

      Aber ich hab's selbst gefunden:

      	var myfunction = function(arr, $form, options){
      		$(':input', $(form).addClass('submit'))
      		.attr('disabled', true);
      	};
      
      	var validator = $("form").validate({
      		submitHandler: function(form) {
      		  $(form).ajaxSubmit({
      		  	beforeSubmit: myfunction  	
      		  });
      		},
      	});
      

      gruss, heinetz

      1. Servus heinetz,

        		$(':input', $(form).addClass('submit')).attr('disabled', true);
        

        Darf ich fragen, was dieses Konstrukt genau tut? Es sieht meiner Ansicht nach etwas abenteuerlich aus. Außerdem verstehe ich es nicht ganz.

        ciao

        --
        "Sir, we are surrounded!" - "Excellent! We can attack in any direction!"
      2. Moin!

        Verstanden habe ich nicht, was Ihr mir sagen wolltet.

        Wenn Du glaubts, dass Du einer Funktion womöglich nicht die richtigen Werte übergibst, dann rate nicht herum, sondern schreibe Dir einfach eine "Fake-Funktion", welche die übergebenen Werte ausgibt.

        Jörg Reinholz