Ignorovani onClick handleru po odeslani formulare

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jan Mikeš
Člen | 771
+
0
-

Ahoj, testuji to na takto jednoduchem formulari:

	protected function createComponentTestForm()
	{
		$form = new \Nette\Application\UI\Form;

		$form->addSubmit("test")->onClick[] = function ($btn) {
			$stop();
		};

		$form->onSuccess[] = function($form, $values) {
			$stop();
		};

		return $form;

Po odeslani formulare se kompletne ignoruje callback onClick, v pripade ze zakomentuji onSuccess handler, provede se http pozadavek a stranka se znovu nacte. Pokud odkomentuji, debugger me stopne na onSuccess callbacku.

Uz do toho nejakou dobu ziram, a opravdu netusim kde muze byt chyba.

ve Form::fireEvents() je submittedBy TRUE, namisto aby to byla instance ISubmitterControl, vypada to, ze formular nepozna, ze je odeslan tim tlacitkem.

Formular vykresluji pres {control} macro

Editoval Lexi (24. 1. 2016 22:33)

Jan Mikeš
Člen | 771
+
0
-

Ve vypisu httpData, dokonce i v $_POST to tlacitko uplne chybi:

array (1) [
	do => "testForm-submit"
]

Edit: dalsi wtf faktor, pokud ten stejny formular odeslu ajaxem vse je v poradku (nette.ajax.js), zrusim class ajax na formu a opet nefunguje

Editoval Lexi (24. 1. 2016 23:54)

Jan Mikeš
Člen | 771
+
+1
-

OMG, po 3 hodinach hledani chyby v PHP, jsem si uvedomil, ze disabluju submit button po odeslani formulare:

<script>
$('form').preventDoubleSubmission();

jQuery.fn.preventDoubleSubmission = function() {
	$(this).on('submit',function(e){
		var $form = $(this);

		if (Nette.validateForm(this)) {
			if ($form.data('submitted') === true) {
				e.preventDefault();
			} else {
				$form.data('submitted', true);
				$form.find("input[type='submit']").addClass("disabled"); // .attr('disabled','disabled');
				// Po nepridavani atributu disabled opet funguje..
			}
		}
	});

	return this;
};
</script>

Kdyby nahodou nekdo mel podobny problem tak snad mu to usetri cas :-)

Editoval Lexi (25. 1. 2016 7:59)