isSubmitedBy() nefunguje s prevencí vícenásobného odeslání formuláře

pernica@tomp.eu
Člen | 6
+
0
-

Ahoj.

Non Nette aplikace, používám Nette Forms. Mám formulář, který má 2 submit buttony:

$form->addSubmit('znamka', 'Hodnotit známkou');
$form->addSubmit('zapocet', 'Hodnotit zápočtem');

Který submit byl použit testuji takhle:

if ( $form['znamka']->isSubmittedBy() {}
if ( $form['zapocet']->isSubmittedBy() {}

Tímto javascriptem řeším vícenasobné odeslání. To funguje správně. Ale u formuláře, kde je více submit buttonů nepoznám, kterým byl odeslán.

// Prevent multiple submit
$("form").on("submit", function() {
  $('input[type=submit]').disabled = true;
  $('input[type=submit]').prop("disabled", "disabled");
  $('input[type=submit]').val("Odesílám, čekejte...");
  return true;
});

Takhle vypadá dump form:

Nette\Forms\Form
onSuccess: array (0)
onError: array (0)
onSubmit: array (0)
onRender: array
0 => 'makeBootstrap4'
httpRequest: Nette\Http\Request
crossOrigin: false
submittedBy: true
httpData: array
element: Nette\Utils\Html
attrs: array
children: array (0)
name: 'form'
isEmpty: false
renderer: unset
translator: null
groups: array (0)
errors: array (0)
beforeRenderCalled: false
onValidate: array (0)
currentGroup: null
validated: true
mappedType: null
components: array
cloning: null
parent: null
name: 'seminarka-hodnoceni-form'
monitors: array
'Nette\Forms\Form' => array

Když vypnu ten JavaScript, funguje správně, je tam tohle:

submittedBy: Nette\Forms\Controls\SubmitButton
onClick: array (0)
onInvalidClick: array (0)
validationScope: null
value: 'Hodnotit známkou'
control: Nette\Utils\Html
label: Nette\Utils\Html
disabled: false
caption: 'Hodnotit známkou'
errors: array (0)
omitted: true
rules: Nette\Forms\Rules
translator: true
options: array
parent: Nette\Forms\Form #97 RECURSION
name: 'znamka'
monitors: array

Může to JS takto ovlivňovat? Díky za rady.

Editoval pernica@tomp.eu (4. 9. 15:55)

nightfish
Člen | 516
+
+3
-

@pernicaatompeu
Myslím, že by problém mohl být v $('input[type=submit]').disabled = true; a/nebo v $('input[type=submit]').prop("disabled", "disabled");, protože podle HTML specifikace se disabled form prvky (inputy, buttony atd.) neodesílají na server.

pernica@tomp.eu
Člen | 6
+
0
-

Ahoj,
to mě nenapadlo. Díky!
Tohle to mělo na svědomí. Ten „prop“ funguje, také se disabluje, takže to funguje dle potřeby.
$(‚input[type=submit]‘).disabled = true;