Nie rozumiem
Od dobrych 10 minut zastanawiam się co mam nie tak. I jak dotąd doszedłem do tego, że po prostu Firefox jest głupi, bo inaczej tego nie mogę wytłumaczyć.
Mam sobie formularz, w którym jest textarea. Chcę, aby nie dało się wpisać więcej znaków niż określoną długość (z pewnymi modyfikacjami). Więc sobie muszę zaprząc do tego JavaScript.
Obecnie mam takie przypisywanie zdarzenia:
addEvent(document.getElementById('comment'), 'keypress', function (e) { return false; });
Gdzie addEvent() to znana funkcja Johna Resiga. Na zdrowy rozsądek to przy czymś takim nie powinno się dać wpisać, każdego znaku, prawda? A może się mylę i gdzieś głęboko wpadłem w dziwne myślenie?
Niemniej IE respektuje zachowanie jakie bym chciał, a Firefox nie.
Podobna sytuacja występuje przy onsubmit formularza.
10 stycznia 2008 21:14:00
Dorzucić
e.preventDefault()próbowałeś?10 stycznia 2008 21:21:16
Spróbuj może na ten sposób. Ja zawsze się uczyłem sposobu cośtam.onkeyup, tak jak w wymienionym wyżej linku, i jakoś nigdy nie miałem z tym większych problemów.
10 stycznia 2008 21:22:04
@Mouser: wszystko, co jest inline, ssie.
10 stycznia 2008 21:27:39
e.preventDefault() przed return false; w funkcji sprawdza się mniej więcej jak powinno. Jednak wymaga to dodania dodatkowych dwóch linii w każdej funkcji obsługującej zdarzenie.
Porzucenie addEvent() na rzecz po prostu
document.getElementById('comment').onkeypress = function (e) { return false; }działa. I tak samo zaczyna działać wszystko w innych zdarzeniach.Nie wiem czy w drugim rozwiązaniu jest coś złego, ale mam wrażenie, że jest dla mnie wygodniejsze nieco. I się ku prostemu przypisywaniu zdarzeń skłaniam.
Ech, nie lubię JS.
10 stycznia 2008 21:29:29
(e.preventDefault) ? e.preventDefault() : (e.returnValue = false);– 1 linia ;)Jest coś bardzo złego :P
10 stycznia 2008 21:33:20
Jest coś bardzo złego, czyli drugie rozwiązanie nie trzyma się standardów i do jednego zdarzenia w elemencie w ten sposób przypiszesz tylko jedną funkcję.
Lepiej skorzystaj z jQuery :-)
10 stycznia 2008 21:35:07
Akurat nie potrzebuję więcej niż jednej funkcji do zdarzenia. I nie mogę użyć jQuery, to ma być prosty projekt na uczelnię, a ja tylko lekko wydziwiam nie chcąc używać zdarzeń bezpośrednio w kodzie HTML.
10 stycznia 2008 21:36:29
I spójrzcie na to:
function askBeforeReset() { return confirm('Czy jesteś pewien, żeby wykasować dane?'); }oraz
addEvent(document.getElementById('reset'), 'click', askBeforeReset);.Oczywiście nie działa w Firefoksie, w IE bez problemu. Szału można dostać.
10 stycznia 2008 21:39:42
Zapis typu
el.oneventw gruncie rzeczy daje taki sam efekt, jakbyś dopisał w HTML atrybutoneventdla elementuel. IMO jQuery (czy też jego brak) nie ma tutaj żadnego znaczenia. W każdym razie podana przeze mnie metoda jest chyba najbardziej polecana i teoretycznie powinna być cross-browser.10 stycznia 2008 21:43:10
function askBeforeReset(e) {confirm('Czy jesteś pewien, żeby wykasować dane?');(e.preventDefault) ? e.preventDefault() : (e.returnValue = false);}addEvent(document.getElementById('reset'), 'click', askBeforeReset);11 stycznia 2008 19:49:39
Nie używaj
el.onclick, źli ludzie Cię podpuszczają. ;) To co zapostował Wąsacz powinno zadziałać, jeśli naprawdę wykorzystujeszaddEventResiga.