IE8 отправляет форму на текущую страницу - PullRequest
1 голос
/ 02 сентября 2010

Он работает во всех других браузерах и раньше работал на IE8, но я немного очистил код и переместил некоторые вещи, и теперь он отправляет эту форму самому себе. Это загрузчик "ajax" (да, не совсем ajax, но вы понимаете, о чем я)

Вот JS:

function file_upload($theform,item_id){
    $theform.attr('ACTION','io.cfm?action=updateitemfile&item_id='+item_id);
    if($theform.find('[type=file]').val().length > 0){
        $('iframe').one('load',function(){
            $livepreview.agenda({
                action:'get',
                id:item_id,
                type:'item',
                callback:function(json){
                    $theform.siblings('.upload_output').append('<li style="display:none" class="file-upload"><a target="blank" href="io.cfm?action=getitemfile&item_file_id='+json[0].files.slice(-1)[0].item_file_id+'">'+json[0].files.slice(-1)[0].file_name+'</a> <a style="color:red" title="Delete file?" href="#deletefile-'+json[0].files.slice(-1)[0].item_file_id+'">[X]</a></li>').children('li').fadeIn();
                    $theform.siblings('.upload_output').find('.nofiles').remove();
                }
            });
            //Resets the file input. The only way to get it cross browser compatible as resetting the val to nothing
            //Doesn't work in IE8. It ignores val('') to reset it.
            $theform.append('<input type="reset" style="display:none">').children('[type=reset]').click().remove();
        });
    }
    else{
        $.alert('No file selected');
        return false;
    }
}
/* FILE UPLOAD EVENTS */
//When they select "upload" in the modal
$('.agenda-modal .file_upload').live('submit',function(event){de
    file_upload($('.agenda-modal .file_upload'),$('.agenda-modal').attr('data-defaultitemid'));
});

Если вы не знали, ACTION должен быть написан с заглавной буквы, чтобы Firefox работал. Кроме того, я точно знаю, что он подчиняется самому себе, потому что iframe показывает текущую страницу внутри себя и все скрипты загружаются снова. Кроме того, в .live() добавление return false; ничего не делает.

Вот HTML на всякий случай:

        <label>Add Attachment</label>
        <form class="file_upload" method="post" enctype="multipart/form-data" target="upload_target" action="">
            <input name="binary" id="file" size="27" type="file" /><br />
            <br><input type="submit" name="action" value="Upload" /><br />
            <iframe class="upload_target" name="upload_target" src="" style="display:none"></iframe>
        </form>
        <label>Attachments</label>
        <ul class="upload_output">
        <li class="nofiles">(No Files Added, Yet)</li>
        </ul>

Ответы [ 2 ]

0 голосов
/ 02 сентября 2010

Предполагается, что форма должна быть отправлена ​​сама себе.

Учтите, что кнопка имеет тип submit (т.е. отправляет форму автоматически) и что действие формы пустое (т. Е. Отправьте ее самостоятельно).

Однако, как вы правильно сделали, обработчик отправки может привести к тому, что форма вообще не будет отправлена ​​(на что я спрашиваю, какой смысл отправлять в первую очередь? Но это уже не так)

В любом случае, вы должны остановить распространение события и вернуть false в обработчике события.

0 голосов
/ 02 сентября 2010

Вы должны return false; в конце вашего обработчика "submit".

ах - ну, это трудно понять. Хорошо, а где именно это <iframe> определено? edit & mdash; О, да, я вижу это.

изменить еще раз & mdash; Хорошо, я понимаю, что вроде как прыгаю вверх и вниз по тонкому льду с моим доверием, но я предлагаю добавить атрибут "id" к <iframe> (с "upload_target" в качестве значения id). Время от времени я выясняю, какие именно из «имени» и «идентификатора» важны (и когда / почему), но эта информация длится около часа или около того, пока мой мозг не отвергнет ее. (Под «важным» я подразумеваю конкретно <iframe> элементов.)

...