Chrome И Onsubmit

Кликаю enter после ввода комментария в textare и произвожу отправку содержимого через Ajax. Происходит обновления списка комментариев по Ajax.

В FF все корректно, а в Chrome и Opera происходит отправка формы с последующей перегрузкой страницы.

В чем же может быть проблема?

фрагмент формы:


return array(

//    'action'     => '/comments/comment/add',

    'activeForm' => array(

        'id'                   => 'comment-form',

        'class'                => 'CActiveForm',

        'htmlOptions'          => array(

            'enctype' => 'multipart/form-data',

        ),

        'enableAjaxValidation' => true,

        'clientOptions'=>array(

            'validateOnSubmit'=>true,

            'validateOnChange'=>false,

            'onSubmit'=>'return false',

        ), 


    ),

    'elements'   => array(


        'text'       => array(

            'type' => 'textarea',

            'id'=>'commentForm',

            'onfocus'=>'if (this.value == \'Оставить комментарий\') {this.value = \'\'}',

            'onblur'=>'if (this.value == \'\') {this.value = \'Оставить комментарий\';}',

            'onkeypress'=>'if (event.keyCode == 13) {submitForm(this);}'



ajax:




        function submitForm(element) {

            var $form = $(element).closest('form');

            var data = $form.serialize();


            jQuery.ajax({

                'url':'<?php echo Yii::app()->createUrl("/comments/comment/AddCommentViaAjax"); ?>',

                'cache':false,

                'data':data,

                'success':function(html){

                    jQuery("div#comments_data").html(html);

                }

            });


           return false; 

        }



Опера и хром видимо считают, что отсутствие в форме кнопки submit не является препятствием для его совершения.

IMHO вы не на то событие повесили event. Нужно было на onsubmit делать


return submitForm(this); 

Т.к. submitForm возвращает false, то получается "return false;" и собственно самого сабмита браузер не произведет. Но если будет отключен JS то функция не сможет ничего вернуть, то тогда он может и произойдет, по идее это позволяет форме работать даже с отключенным JS.

В общем что бы сабмита не произошло, onsubmit должен возвращать false. Но обработку сабмита надо вешать именно на его событие, а не нажатие "Enter" в каком либо поле.

Правда может произойти такое, что браузер, не найдет элемента “<input type=‘submit’” и не будет вызывать событие, в таком случае HTML кнопку сабмита нужно добавить на страницу, но её можно сделать невидимой.