LINUX.ORG.RU

Если в onsubmit есть хоть что-нибудь, кроме return false, форма отправляется без ajax

 ,


0

1

Есть hostCMS, которая лично мне не нравится, но необходимо как-то переделать форму для отправки комментариев. Т.к. jquery все равно уже подключено, попробовал подключить плагин для форм.

Сначала делал, как в их руководстве:

$('#addCommentAjaxForm').ajaxForm(function() { 
                alert("test"); 
            }); 

Но ничего не происходило, хотя селектор работал. Поставил в форму onsubmit=«doAjaxSubmit()»

function doAjaxSubmit()
{
var options = { 
    target:     '.comment:last', 
    url:        '.', 
    success:    function() { 
alert("added");
    } 
}; 
 $("#addCommentAjaxForm").ajaxSubmit(options);
return false;
};
При этом функция в success выполняется, но после этого происходит обычный submit. Он происходит, даже если закомментировать ajaxSubmit и вообще в любом случае, кроме onsubmit=«return false». В последнем случае не сабмитится вообще никак

★★★★

Последнее исправление: wingear (всего исправлений: 1)

Ответ на: комментарий от linuxnewb

на текущую страницу. Не знаю, как отследить хромовским инструментарием, что происходит после отправки: в консоли только ошибка get-запроса какой-то картинки, а в firefox не работают панели cms(да, все настолько печально).

wingear ★★★★
() автор топика

Тебе обязательно onsubmit? Проще же сделать «кнопочку», которая просто будет запускать твой код — а он уже проверять данные и отправлять их на сервер. И не надо будет лепить скрытые iframe'ы.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от r_asian

сделал - вызывается функция при success, после этого страница пропадает, остается только значок рейтинга mail.ru, а если перезагрузить, видно, что комментарий не отправился. Интересно. Видимо, надо искать, где серверная часть этой страницы, и что-то править там

wingear ★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

там iframe пока никаких нет. Проблема пока в том, что оно вообще никак аяксом не сабмитится.

Проще же сделать «кнопочку», которая просто будет запускать твой код

- это в смысле навесить какой-то модификатор jquery или что?

wingear ★★★★
() автор топика
Ответ на: комментарий от wingear

это в смысле навесить какой-то модификатор jquery или что?

это в смысле <input type=submit value=SendMy! />

linuxnewb
()
Ответ на: комментарий от Eddy_Em

ну, там уже сделано «по-человечески», а от меня требуется именно ajax

wingear ★★★★
() автор топика
Ответ на: комментарий от RR
$(function() {
  $(form selector).submit(function() {    
    $.post(post url, $(this).serialize());
    return false;
  });
});
RR
()
Ответ на: комментарий от wingear

>Не знаю, как отследить хромовским инструментарием, что происходит после отправки:

Сделай какой-нибудь тестовый скрипт, типа

 echo var_export($_POST);
и шли ему.

linuxnewb
()
Ответ на: комментарий от RR

сабмитом не работает (см.тему треда) - если там есть хоть что-нибудь, кроме return false(и то, только в onsubmit), то форма просто отправляется по-обычному. Поэтому приходится через onsubmit вызывать функцию

wingear ★★★★
() автор топика
Ответ на: комментарий от linuxnewb

я давно уже читал, забыл всё)

Если параметр onsubmit пуст, то форма отправляется независимо от того, что вызывается в .submit() jQuery. Если в нём возвращается false, то ничего не происходит опять же независимо от содержимого функции обработки. Почему-то получается изменить поведение формы, только вызвав функцию в onsubmit

wingear ★★★★
() автор топика
Ответ на: комментарий от wingear

Если параметр onsubmit пуст, то форма отправляется независимо от того, что вызывается в .submit() jQuery.

Ты не поверишь, но onsubmit вообще никакого отношения к jQuery не имеет. Только это — секрет!

linuxnewb
()
Ответ на: комментарий от RR

примерно то же и делал. Удалил всё, попробовал так - тоже самое. Видимо, надо смотреть, что там с серверной частью - где она, пока не нашел, т.к. всё обфусцировано зендом

wingear ★★★★
() автор топика
Ответ на: комментарий от wingear

Ладно, <form onsubmit=«return false»> запрещает отправку формы по кнопке submit. Это делается, чтобы 1. форма не отправилась дважды и 2. страница не перегружалась, когда ты делаешь отправку аяксом.

только вызвав функцию в onsubmit

А как еще? И в этой функции обязан вызываться XMLHttpRequest.send().

linuxnewb
()
Ответ на: комментарий от wingear

я где-то говорил, что имеет?

Разве мне это привиделось?

Если в onsubmit есть хоть что-нибудь, кроме return false, форма отправляется без ajax (комментарий)

Сама постановка вопроса говорит о том, что ты представления не имеешь о том, что пытаешься сделать.

linuxnewb
()
Ответ на: комментарий от RR

Ничего(

В обычном режиме пусто, а в strict ничего, относящегося к измененным файлам

wingear ★★★★
() автор топика
Ответ на: комментарий от linuxnewb

я сначала хотел всё через плагин form сделать, но столкнулся с тем, что форма не реагирует, поэтому пришлось что-то добавлять в onsubmit. Видимо, придется таки делать без jquery

wingear ★★★★
() автор топика
$(function(){
$('#my-form-id).submit(function(e) {
  e.preventDefault();
  foo();
}
})

Если не работает - ты чтото делаешь не так или ктото чтото делает с формой кроме тебя, попробуй $('#my-form-id').unbind('submit') перед этим кодом.

zz ★★★★
()
Ответ на: комментарий от linuxnewb

Я переделал этот пример, но, пока явно не прописал вызов функции в onsubmit, ничего не происходило, будто ошибка в селекторе. Но .html() при загрузке страницы правильно показывал содержимое формы, значит, едло в чем-то другом

wingear ★★★★
() автор топика
Ответ на: комментарий от linuxnewb

там уже есть обычная отправка, меня просили переделать с ajax. На форме не срабатывают обработчики jquery, даже после unbind. Возможно, мешает что-то внутри cms. Я знаю javascript в первом приближении(полгода назад плагины для livestreet писал), просто с jquery было удобнее. Видимо, здесь придется с xmlHttpRequest. Или вообще что-то со стороны php не так

wingear ★★★★
() автор топика
Ответ на: комментарий от wingear

там уже есть обычная отправка

Значит, сконцентрируйся на учебнике.

linuxnewb
()
Ответ на: комментарий от wingear

когда происходит событие оно начинает обрабатываеться. вызываются его обработчики, в т.ч. навешенные через жквери. когда обработчики отрабатывают срабатывает само событие, т.е. реализация, так сказать. в твоем случае реализация, или само событие, это отправка формы. в обработчики событий передается экземпляр объекта события, у него есть метод preventDefault, который выключает обработчик самого события, если его вызвать, в твоем случае это сама отправка формы. return false в жквери равносилен preventDefault(), stopPropagation(). если ты не делаешь return false, preventDefault() не вызывается и форма отправляется браузером, что бы там еще в обработчике ты не написал. для начала останавливай событие, если хочешь отправлять форму аяксом. я не рекомендую писать return false по многим причинам. напиши event.preventDefault() первой строке в теле обработчика события (теперь если в нем произойдет ошибка, ты увидишь это в консоли и форма все равно не отправится, иначе хрен заметишь) далее, тебе нужно самостоятельно отправлять данные на сервер через запрос $.ajax. я не рекомендую использовать плагины форм, начни с простого. типа

var data = { commentText: $(«#commentText»).val(), commentEmail: $(«#commentEmail»).val() } $.post(".", data).done(function () { console.log(«success!»); })

и так далее

trashymichael ★★★
()
$("body").delegate("#addCommentAjaxForm", "submit", function(e) {
    alert('Submit disabled');
    return false;
});

Может форма добавляется динамически.

RR
()
Ответ на: комментарий от RR

Если сработает - как отослать форму аяксом я выше писал.

RR
()
Ответ на: комментарий от RR

получилось делегатом. Потом оказалось, что форма почему-то добавляется и скрывается для каждого коммента, т.е. не следовало навешивать id. Пришлось выбирать через .last()

wingear ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.