live form validation IE mouse wheel
- ruller
- Člen | 29
Nette 2.0
Live Form Validation for Nette 2.0
Narazil som na bug resp. chybu v live form validácií alebo chyba moja ?
:/
konkrétne táto časť:
if (/MSIE/.exec(navigator.userAgent)) {
var labels = {},
wheelHandler = function() {
return false;
},
clickHandler = function() {
document.getElementById(this.htmlFor).focus();
return false;
};
for (i = 0, elms = form.getElementsByTagName('label'); i < elms.length; i++) {
labels[elms[i].htmlFor] = elms[i];
}
for (i = 0, elms = form.getElementsByTagName('select'); i < elms.length; i++) {
Nette.addEvent(elms[i], 'mousewheel', wheelHandler); // prevents accidental change in IE
if (labels[elms[i].htmlId]) {
Nette.addEvent(labels[elms[i].htmlId], 'click', clickHandler); // prevents deselect in IE 5 - 6
}
}
}
jedná sa o selecty, neboli rozbalovacie menu keď máme vygenerovaný
kód:
poznámka: problém je u všetkých selectoch nie len ručne vložených
selectov ale aj tých vygenerovaných pomocou nette form. ja som pre ukážku
vložil obyčajný select ktorý nie je naviazaný na tie validačné pravidlá
a aj tak nefunguje pri nich scroll
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript" src="/js/netteForms.js"></script>
</head>
<body>
<form action="test?do=testForm-submit" method="post" id="frm-testForm">
<input type="password" size="15" name="test1" id="frmtestForm-test1" />
<select>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
<option value="asd">asdasd</option>
</select>
<input type="submit" name="set" id="frmtestForm-set" value="OK" />
</form>
</body>
</html>
v rozbalovacích menu nefunguje kolečko myši. konkrétne sa v IE volá časť
for (i = 0, elms = form.getElementsByTagName('select'); i < elms.length; i++) {
Nette.addEvent(elms[i], 'mousewheel', wheelHandler);
// prevents accidental change in IE
// wheelhandler obsahuje
wheelHandler = function() {
return false;
},
ciže po použití kolečka sa volá return false a nefunguje scroll,
testoval som na IE 7,8,9
je problém len v tom konkrétnom príklade? alebo niečomu nechápem ja
? :))
Editoval ruller (17. 9. 2012 15:20)
- redhead
- Člen | 1313
Můžeš se prosím přesvědčit, že to dělá i standardní javascriptová validace z balíku Nette?
Mám pocit, že je to kvůli tomu, že když v IE vybereš hodnotu ze selectu a scrollneš jako bys chtěl posunout stránku s formulářem, tak místo toho IE začne vybírat další hodnoty v selectu místo posunu stránky a to tento skript „opravuje“ (spíš zakazuje, protože je to debilní chování).
- redhead
- Člen | 1313
Ano, rozbalíš seznam, klikneš na nějakou hodnotu a seznam se zavře, select má ale stále focus a při scrollování kolečkem se začne měnit hodnota (bez otevření seznamu), což sice není velký problém, ale uživatel radši chce po výběru hodnoty posunout stránku s formulářem než měnit hodnotu. Navíc to dělá pouze IE a tak další důvod byl sjednotit chování. Ale nemožnost scrollovat seznamem je trochu deal-breaker, no..
- ruller
- Člen | 29
no ja mam IE9 a v compatibility mode pre IE8 a IE7 a nerobi to tak. ked zvolím hodnotu a scrollujem tak posúva stránku a nemení hodnoty v tom selecte, asi to platí pre tie staršie IE 8 a 7, napadá ťa nejaká metóda ako by sa to dalo vyriešiť ináč? napadá ma jquery ale neviem či by to fungovalo a v čistom javascripte neviem už vôbec…
for (i = 0, elms = form.getElementsByTagName('select'); i < elms.length; i++) {
Nette.addEvent(elms[i], 'mousewheel', function() {
var id=$(this).attr("id");
$(id).focus( function() {
return true;
});
$(id).blur( function() {
return false;
});
});
}