Dzień dobry. Mam taki problem. Może głupi i dla początkujących:
Mam taki kod:
var elements = ["prod", "direct", "count", "comp"];
var i = -1;
for (i = 0; i < elements.length; i++)
document.getElementsByTagName("form")[0].elements[elements[i]].addEventListener("keyup",
function (e)
{
var numberOfChars = this.value.length; // - this.value.getSelection().length;
var hit = getFirstOrderedElement(elements[i], this.value);
if (e.keyCode != 8 && e.keyCode != 16 && e.keyCode != 17 && e.keyCode != 18)
{
this.value = (hit == "") ? this.value : hit;
this.setSelectionRange(numberOfChars, -1);
}
});
Chodzi o to, że umieściłem w definicji funkcji zmienną i
która istnieje poza funkcją. Kiedy for przeleci, zmienna i = 4
. A ja bym chciał, żeby funkcje zdefiniowane przeze mnie korzystały nie, z wartości aktualnej, tylko z wartości i, znanej w momencie definiowania, czyli, 0, 1, 2, 3
. Jak to zrobić?
PS. Pytanie nadal aktualne, ja jednak znalazłem inne rozwiązanie: Jako, że mam tylko 4 pola do obróbki, stworzyłem sobie, z palca, 4 funkcje i je, z palca przypisałem. Nie jest to eleganckie, ale trudno.
function autoComplete(event, th, n)
{
var numberOfChars = th.value.length; // - th.value.getSelection().length;
var hit = getFirstOrderedElement(elements[n], th.value);
if (event.keyCode != 8 && event.keyCode != 16 && event.keyCode != 17 && event.keyCode != 18)
{
th.value = (hit == "") ? th.value : hit;
th.setSelectionRange(numberOfChars, -1);
}
}
function fProd(event)
{
autoComplete(event, this, 0);
}
function fDirect(event)
{
autoComplete(event, this, 1);
}
function fCount(event)
{
autoComplete(event, this, 2);
}
function fComp(event)
{
autoComplete(event, this, 3);
}
document.getElementsByTagName("form")[0].elements[elements[0]].addEventListener("keyup", fProd);
document.getElementsByTagName("form")[0].elements[elements[1]].addEventListener("keyup", fDirect);
document.getElementsByTagName("form")[0].elements[elements[2]].addEventListener("keyup", fCount);
document.getElementsByTagName("form")[0].elements[elements[3]].addEventListener("keyup", fComp);
Pytanie nadal aktualne
Dzięki
Michał