netteForms.js:64 – maximum call stack size exceeded
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Tomáš Votruba
- Moderator | 1114
Na hlavní stránce (BasePresenter) mi netteForms.js funguje, nicméně na podstránce již ne a spolu s ním i (zřejmě) všechny následující.
Přes Chrome jsem odhalil, že existuje nějaká chyba na 64. řádku –
maximum call stack size exceeded.
Jde údajně o nějakou rekurzivní záležitost, která vyčerpá paměť.
Čím by to mohlo být způsobeno? Chybně zapsaný pravidlem?
Jdu je zatím prozkoumat. Těším se na vaše rady, díky.
<script>
Nette.validateControl = function(elem, rules, onlyCheck) {
rules = rules || eval('[' + (elem.getAttribute('data-nette-rules') || '') + ']'); // 64. řádek
netteForms.js:64Uncaught RangeError: Maximum call stack size exceeded
for (var id = 0, len = rules.length; id < len; id++) {
var rule = rules[id], op = rule.op.match(/(~)?([^?]+)/);
rule.neg = op[1];
rule.op = op[2];
rule.condition = !!rule.rules;
var el = rule.control ? elem.form.elements[rule.control] : elem;
var success = Nette.validateRule(el, rule.op, rule.arg);
if (success === null) { continue; }
if (rule.neg) { success = !success; }
if (rule.condition && success) {
if (!Nette.validateControl(elem, rule.rules, onlyCheck)) {
return false;
}
} else if (!rule.condition && !success) {
if (el.disabled) { continue; }
if (!onlyCheck) {
Nette.addError(el, rule.msg.replace('%value', Nette.getValue(el)));
}
return false;
}
}
return true;
};
</script>
- Tomáš Votruba
- Moderator | 1114
Tak chyba je ve validačním pravidlu pluginu datePicker:
<?php
$form = new Form;
$form->addDatePicker("date","Den:")
->setDefaultValue($this->currentDate)
->addRule(Form::FILLED,"Vyplňte datum");
->addRule(Form::VALID,"Datum nemá správný formát"); // bugující pravidlo
?>
Bez tohoto pravidla se zřejmě při nejhorším obejdu, nicméně kdo by
viděl v datePicker.php
– https://github.com/…tePicker.php#L188
související chybu, může napsat řešení.
Editoval Schmutzka (17. 10. 2011 19:30)