0

jQupload を使用して画像を非同期にアップロードしようとしています。このスクリプトは、ページの iframe を使用してアップロードし、iframe の .load() イベントをキャッチして、返された JSON メッセージを返します。

標準の HTML ページの下部にフォームを表示し、javascript を含めると、正常に動作します。ただし、アップロード フォームをモーダル ウィンドウにロードしたいので、これには facebox を使用しています。したがって、フォームは、ページの下部に「display:none」に設定されたスタイル タグが含まれており、特定のボタンがクリックされたときにモーダル ウィンドウに表示されます。

モーダル ウィンドウ内では、フォームの送信は問題なく行われ、iframe に値が入力されますが、フォームの送信イベントのコードが JavaScript によってキャッチされません。関数で単純な文字列を警告しようとしましたが、結果が得られません。ただし、フォームの「onsubmit」タグを使用して文字列を警告すると、問題なく動作します。

次のコード行は、ok を実行し、ターゲット属性をフォームに追加します。

$(this).attr("target",data.iframe);

これは、モーダル ウィンドウ内で実行されていない次のコード行です。

$(this).submit(function(){
                            alert('hello!');
                $("#"+data.iframe).load(function(){
                    var data1=$("#"+data.iframe).contents().find("body").html();
                    data1='{"formid":{"value":"'+id+'"},'+data1.substr(1);
                    if($.jQupload.callback[id]){
                        eval($.jQupload.callback[id]+"('"+data1+"')")
                    }
                    else{
                        if($.jQupload.output[id]){
                            $.jQupload.jsonMessage(data1)
                        }
                        else{
                            $.jQupload.defaultMessage(data1)
                        }
                    }
                    $("#"+data.iframe).contents().find("body").html("");
                    $("#"+data.iframe).unbind("load")
                })
            });

このコードは、次の 2 行を使用して呼び出される jQupload 関数内からのものです。

$("#image_upload_form").jqupload();
$("#image_upload_form").jqupload_form();

これは完全な jQupload コードであり、http://jqframework.com/jqupload_doc.html で説明されているように使用されています

    /*  jQupload - jQuery Upload v0.1
 *  jQupload is distributed under the terms of the MIT license
 *  For more information visit http://jqframework.com/jqupload
 *  Copyright (C) 2010  jqframework.com
 * Do not remove this copyright message
 */
$.jQupload = {
    fadeOutTime:3000,
    callback:{},
    output:{},
    init: function(id,obj){
        if(obj.callback){
            $.jQupload.callback[id]=obj.callback
        }
        if(obj.output){
            $.jQupload.output[id]=obj.output
        }
        if(obj.fadeOutTime){
            $.jQupload.fadeOutTime=obj.fadeOutTime
        }
    },
    defaultMessage:function(data){
        alert(data)
    },
    jsonMessage:function(data){
        eval("data="+data);
        $("#"+$.jQupload.output[data.formid.value]).html(data.message).fadeOut($.jQupload.fadeOutTime)
    }
};

$.fn.extend({
    jqupload:function(obj){
        return this.each(function(){
            var id=this.id;
            if(typeof this.id=="object"){
                id=$(this).attr("id")
            }
            if(!obj)
                obj={};
            $.jQupload.init(id,obj)
        })
    },
    jqupload_form:function(){
        return this.each(function(){
            var id=this.id;
            if(typeof this.id=="object"){
                id=$(this).attr("id")
            }
            var data=$.extend(
                {},
                {iframe:id+"_iframe"},
                data
            );
            $("body").append("<iframe name="+data.iframe+' id="'+data.iframe+'"></iframe>');
            //$("#"+data.iframe).css({position:"absolute",left:"-1000px",top:"-1000px",width:"0px",height:"0px"});
            $("#"+data.iframe).css({position:"absolute",left:"0px",top:"0px",width:"500px",height:"500px"});
            $(this).attr("target",data.iframe);

            $(this).submit(function(){
                $("#"+data.iframe).load(function(){
                    var data1=$("#"+data.iframe).contents().find("body").html();
                    data1='{"formid":{"value":"'+id+'"},'+data1.substr(1);
                    if($.jQupload.callback[id]){
                        eval($.jQupload.callback[id]+"('"+data1+"')")
                    }
                    else{
                        if($.jQupload.output[id]){
                        }
                            $.jQupload.jsonMessage(data1)
                        else{
                            $.jQupload.defaultMessage(data1)
                        }
                    }
                    $("#"+data.iframe).contents().find("body").html("");
                    $("#"+data.iframe).unbind("load")
                })
            });
            return true
        })  
    }
});

何か案は?

4

1 に答える 1

0

マット、問題はあなたが使用しているセレクターが実際にはフォームに何も装備していないことだと思います:

$(this).submit(function() {...

特定のコンテキストでのみ機能します。どこでも機能するには、次のようにする必要があります。

$("#myFormId").submit(function() {....
于 2010-02-20T13:13:20.967 に答える