live form validation IE mouse wheel

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

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
+
0
-

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
+
0
-

A to, že „nefunguje kolečko“ znamená, že nejde rolovat seznamem, když je rozkliknutý?

ruller
Člen | 29
+
0
-

ano nefunguje rolovat seznamem s koleckom ked je rozkliknuty
// edit skusim aj s klasickym nette dam vediet

Editoval ruller (17. 9. 2012 15:13)

ruller
Člen | 29
+
0
-

standardní javascriptová validace z balíku Nette robí to isté, nefunguje rolovanie v rozkliknutom menu

redhead
Člen | 1313
+
0
-

Jedině reportovat Davidovi, nejlepší by to bylo úplně odstranit, ale zase ta změna hodnoty scrollováním je na palici.

ruller
Člen | 29
+
0
-

môžeš mi povedať aká to je situácia? nechápem kôli čomu to tam je, akože zvolíš hodnotu v menu a scrollneš myškou tak sa menia hodnoty v tom scroll namiesto posunu stranky, chápem to správne ?

redhead
Člen | 1313
+
0
-

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
+
0
-

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;
				});
			});

		}
redhead
Člen | 1313
+
0
-

Hledal jsem po netu a vypadá to na jediný možný způsob. Ale klidně ty řádky prostě vyhoď a máš vystaráno. Bylo to jen pro pohodlnost uživatelům a pokud to v nových verzích IE už není (myslím, že to fungovalo v IE6), tak to nemá cenu moc řešit.

ruller
Člen | 29
+
0
-

tak teda vyhodim to, mam pridať niekde autorom poznámku nech to vyhodia z toho validátoru? alebo zmazať toto vlákno a zabudnúť na to ? :D

redhead
Člen | 1313
+
0
-

No, pokud to mrví scrollování v seznamu, tak bych to reportoval.

ruller
Člen | 29
+
0
-

len chcelo by to vyskúšať aj niekým iným nie len mnou…