Formularz i toQueryString
Ostatnio mi się zdarzyło, że musiałem poprawić bardzo denerwujący błąd w starym skrypcie, który wykorzystywał jedną z wczesnych wersji mootools’a. Problem występował oczywiście tylko w Internet Explorerze (testowano na wersji 7) a polegał na tym, że funkcja toQueryString() powodowała błąd „obiekt nie obsługuje takiej metody”. Dlaczego tak się działo nie mam zielonego pojęcia jednak zmusiło mnie to do napisania alternatywnej funkcji wykonywanej gdy mootools’owa funkcja zawiedzie. Nie jest ona może taka ładna i prosta w użyciu jak ta mootools’owa ale działa. Poniżej kod tej funkcji:
-
function toQueryString(elem) {
-
var queryString = [];
-
var elements = [];
-
try {
-
var elements1 = elem.getElements(‚input’);
-
if (elements1[0]) elements = elements.concat(elements1);
-
var elements2 = elem.getElements(‚select’);
-
if (elements2[0]) elements = elements.concat(elements2);
-
var elements3 = elem.getElements(‚textarea’);
-
if (elements3[0]) elements = elements.concat(elements3);
-
} catch(e) {
-
}
-
if (elements[0]) {
-
elements.each(function(el){
-
if (!el.name || el.disabled) return;
-
var value = null;
-
switch (el.tagName.toLowerCase()) {
-
case ‚select’: value = el.value; break;
-
case ‚textarea’: value = el.value; break;
-
case ‚input’:
-
if (el.type == ‚radio’ || el.type == ‚checkbox’) {
-
if (el.checked) value = el.value;
-
} else {
-
value = el.value;
-
}
-
break;
-
}
-
if (value != null) queryString.push(el.name + ‚=’ + encodeURIComponent(value));
-
});
-
}
-
return queryString.join(‚&’);
-
}
Oczywiście funkcja ta wymaga mootools’a – nie ma jednak różnicy którego :)