Comments 32
Было бы намного удобнее давать вам совет, если бы код был более читабельным.
Ага, типа такого
$(document).ready(function(){
//ajax login
$("#loginform").bind("submit",function() {
var qString = $('#loginform').formSerialize();
$.getJSON('login.html', qString, function(json){
if(json.result == 1){
$('#login').html('');
$('#login').append('<a href=profile.html?id=' + json.id + '>' + json.login + ' Выход');
$("#logout").bind(«click»,function() {
// Функции должна возвращать false
return false;
});
} else {
$('#msg').html('');
$('#msg').append('Неверно введён логин или пароль');
}
});
// Функции должна возвращать false
return false;
});
//end ajax login
//ajax logout
$("#logout").bind(«click»,function() {
$('#login').load(«logout.html»);;
// Функции должна возвращать false
return false;
});
//end ajax logout
});
//end document.ready
* This source code was highlighted with Source Code Highlighter.
Я, возможно, не совсем понял принцип работы вашего кода, но нахрена вы делаете
$("#logout").bind(«click»,function() {при логине? Что вы ожидаете потом будет происодить при нажатии на $("#logout") — который, кстати, вообще не понятно что из себя представляет и где находится.
// Функции должна возвращать false
return false;
});
если я не ставлю в конце
то у меня вобще событие не обрабатывается
return false;
то у меня вобще событие не обрабатывается
#logout это ссылка «Выход» с id=logout
просто хабр ссылку «съел»
просто хабр ссылку «съел»
Ну тогда все просто. Вы вешаете обработчик ДО появления самого объекта.
Тут есть два выхода — либо использовать live вместо bind
Либо делать $("#logout").bind — прямо в логине.
В вашем же случае, сначала срабатывают все «вешалки» событий, и не найдя объекта #logout успокаиваются. Когда вы создаете его уже во время работы страницы, событие на него само не повесится.
Тут есть два выхода — либо использовать live вместо bind
Либо делать $("#logout").bind — прямо в логине.
В вашем же случае, сначала срабатывают все «вешалки» событий, и не найдя объекта #logout успокаиваются. Когда вы создаете его уже во время работы страницы, событие на него само не повесится.
вообще-то все это завернуто в $.ready так что дело не в этом.
А вот в чем.
Здесь на клик по #logout вешается функция которая загружает logout.html.
Поэтому все работает после перезагрузки страницы.
А вот если мы перед этим залогинились, отправив #loginform — то здесь то, что его обрабатывает, после успешного входа зачем-то вешает на #logout пустую функцию, поэтому ничего и не происходит.
А вот в чем.
Здесь на клик по #logout вешается функция которая загружает logout.html.
Поэтому все работает после перезагрузки страницы.
А вот если мы перед этим залогинились, отправив #loginform — то здесь то, что его обрабатывает, после успешного входа зачем-то вешает на #logout пустую функцию, поэтому ничего и не происходит.
видимо ссылка «выход» создается после логина, так что это правильно — повесить на нее событие для выхода. Вот только дописать его надо :)
о чем я и сказал…
я уже дописывал, но проблема от этого не решается! Если пользователь залогиниться, а потом захочет отлогиниться, то у него получиться, но если он вдруг опять захочет залогиниться, то уже не получиться! Вот в этом-то и проблема!
и еще нарисовали бы структуру формы, сделана ли она так? может есть еще какие элементы? может подгружается что важное в login.html / logout.html
<form id="loginForm">
<div id="login"></div>
</form>
или
<div id="login">
<form id="loginForm"></form>
</div>
* This source code was highlighted with Source Code Highlighter.
<div id="login">
<form id="loginform">
Логин: <input type="text" name="login" /><br>
Пароль: <input type="password" name="password" /><br>
<input type="submit" name="go" value="Войти" />
</form>
<span id="msg"><a href="/easyski/registration.html">Регистрация</a></span>
</div>
* This source code was highlighted with Source Code Highlighter.
Странно конечно, что live не помог, но я jquery не пользуюсь и м.б. чего не знаю.
Ваш код при отработке $('login').append и $('login').load удаляет все обработчики, т.к. вы очищаете самый главный контейнер, и если уж не заморачиваться, я бы переделал так:
HTML
js
Получается, что функции будут лежать отдельно и просто запускаться при кликах, а вы загружаете необходимый код с готовым событием onclick.
Кто-то скажет, что некрасиво, но главное вполне работоспособно :)
Ваш код при отработке $('login').append и $('login').load удаляет все обработчики, т.к. вы очищаете самый главный контейнер, и если уж не заморачиваться, я бы переделал так:
HTML
<div id="login">
<form id="loginform">
Логин: <input type="text" name="login"><br>
Пароль: <input type="password" name="password" /><br>
<input type="submit" name="go" value="Войти" onclick="return SubmitRegForm()">
</form>
<span id="msg"><a href="/easyski/registration.html">Регистрация</a></span>
</div>
* This source code was highlighted with Source Code Highlighter.
js
function SubmitRegForm(){
var qString = $('#loginform').formSerialize();
$.getJSON('login.html', qString, function(json){
if(json.result == 1){
$('#login').html('');
$('#login').append('<a href=profile.html?id=' + json.id + '>' + json.login + '</a> <a id="logout" href="" onclick="return UserLogout()">Выход</a>');
} else {
$('#msg').html('');
$('#msg').append('Неверно введён логин или пароль');
}
});
return false;
}
function UserLogout(){
$('#login').load("logout.html");
return false;
}
* This source code was highlighted with Source Code Highlighter.
Получается, что функции будут лежать отдельно и просто запускаться при кликах, а вы загружаете необходимый код с готовым событием onclick.
Кто-то скажет, что некрасиво, но главное вполне работоспособно :)
Если же не хотите смешивать html+js, то скорее всего придется менять саму форму логина, чтоб не убивать все подряд :)
Процитирую James Bennet, одного из разработчиков Django:
«If you call yourself a “web developer” you have absolutely no excuse for not knowing Javascript. And if you don’t know Javascript, you have absolutely no right to call yourself a “web developer”»
«If you call yourself a “web developer” you have absolutely no excuse for not knowing Javascript. And if you don’t know Javascript, you have absolutely no right to call yourself a “web developer”»
I don't call myself «web developer».
Зачем тогда «осваиваете jQuery и пишете ajax авторизацию для своего сайта»?
Отдайте эту задачу студентам-фрилансерам, они вам за еду всё сделают.
Отдайте эту задачу студентам-фрилансерам, они вам за еду всё сделают.
По вашей логике — так учиться ничему вообще не нужно. Еду только студентам раздавай.
По моей логике врач должен лечить, строитель — строить, программист — программировать.
Вряд ли вы заходите чтобы аппендикс вам удалял какой-нибудь дизайнер.
Вряд ли вы заходите чтобы аппендикс вам удалял какой-нибудь дизайнер.
Неправильная аналогия: если следовать логике, то аппендикс будет удалятся (тьфу, тьфу) себе самим foof :)
Он не веб-девелопер, но занимается веб-девелоперством. Что неправильного?
я — студент, а студент, как правило учиться, чем я и занимаюсь.
Так вот если вы хотите научиться, то сначала изучите javascript, а потом беритесь за jQuery. Не наоборот.
Вы бы лучше помогли мне разобраться в коде…
В том-то и вся проблема, что вы мыслите кодом. А в коде ошибки от непонимания jQuery. А jQuery вы не понимаете потому что не знаете javascript.
А помочь я не могу т.к. не вижу контекста в котором этот код исполняется. Откуда я знаю что у вас возвращает logout.html и как выглядит DOM-дерево которое вы изменяете? Телепаты в отпуске.
А помочь я не могу т.к. не вижу контекста в котором этот код исполняется. Откуда я знаю что у вас возвращает logout.html и как выглядит DOM-дерево которое вы изменяете? Телепаты в отпуске.
Наверное, мы обое правы по-своему. foof делает себе «операцию» сам, вместо того, чтобы пригласить для этой работы специалиста.
> $('#login').append('<a href=profile.html?id=' + json.id + '>' + json.login + ' Выход');
Для начала закройте тег )
Для начала закройте тег )
Sign up to leave a comment.
прошу консультации по jQuery