2010-06-24 49 views
2

我正在使用Ben Nadel的iFrame Upload函數來編輯我正在處理的網站上的工具。我正在學習jQuery。該功能的作品非常漂亮。它是可重複使用的模式窗口的一部分,一切正常。但是,我想動態地告訴函數來自哪裏,因此它將適當的窗體加載到模態窗口中。我將如何將它傳遞給函數。現在它被硬編碼爲接收#uploadform。從本質上講,我想重新使用功能和類似的動作,預覽varialbles下降,形成ID等等如何將元素ID傳遞到我的jQuery函數中

$(function(){ 
       var jForm = $("#uploadform"); 
       jForm.submit(
        function(objEvent){ 
        var jThis = $(this); 
        var strName = ("uploader" + (new Date()).getTime()); 
        var jFrame = $("<iframe name=\"" + strName + "\" src=\"about:blank\" />"); 
        jFrame.css("display", "none"); 
        jFrame.load(
         function(objEvent){ 
          var objUploadBody = window.frames[ strName ].document.getElementsByTagName("body")[ 0 ]; 
          var jBody = $(objUploadBody); 
          var objData = eval("(" + jBody.html() + ")") 
          var thumb = ('thumbnails/' + eval(jBody.html())); 
          $("#header").css("background", "url(" + thumb + ") no-repeat center"); 
          $("#preview").attr("src", thumb); 
        setTimeout(
         function(){ 
          jFrame.remove(); 
          },100); 
       }); 
      $("body:first").append(jFrame); 
      jThis 
       .attr("action", "upload_act_single.cfm") 
       .attr("method", "post") 
       .attr("enctype", "multipart/form-data") 
       .attr("encoding", "multipart/form-data") 
       .attr("target", strName); 
      }); 
     }); 

回答

4

我會建議類似的東西除了創建的場合一個單獨的函數:

function formSubmit(formId) { 
    var jForm = $("#"+formId); 
    //remainder of your code 
} 

接下來,每種形式直接創建您的onsubmit連接聲明HTML表單時:

<form id="myForm" class="pageForms" onsubmit="function(formSubmit(this.id))> ... 

或者編程:

$("#myForm").submit(function() { 
    formSubmit("#myForm"); 
}); 

[OR]

$(".pageForms").submit(function() { //to apply to all forms within the document 
    formSubmit("#"+this.id);   //with that class 
}); 

或所有形式的文件(但不能肯定是否會工作)

$("form").submit(function() { 
    formSubmit("#"+this.id); 
}); 

記住在onLoad函數中執行附件[$(function(){...})]或者其他erwise javascript錯誤可能發生:S

+0

那麼,本質上我的上傳是用formSubmit函數包裝的,對嗎?如果是這樣的話,我懷疑這也可以讓我定義我的其他變量,比如提交的數據以及其他我希望在提交中包含的數據。如果我在文件輸入字段中進行了onChange而不是onSubmit,這是否也允許我自動提交? – Ofeargall 2010-06-25 17:12:57

+0

準確地說,您可以在標準HTML表單元素中定義方法和動作,並通過this.action/this.method以基本javascript調用它們。因此,只需要一個jQuery功能!是的,您可以使用onChange觸發器,只需在要提交的數據中使用$(「formElement.id」).val()。 你應該看看dojo工具包,特別是dojo.xhrGet/dojo.xhrPost(或用於多部分表單數據的dojo.io.iframe.send)方法;) – lintal 2010-06-25 19:47:45

0

嘗試$(this).attr("id")

+0

這實在是一個評論,而不是對問題的回答。請使用「添加評論」爲作者留下反饋。 – 2012-08-23 04:17:50

+1

感謝您的反饋:)下次會做 – GerManson 2012-08-23 23:03:32

0
var myFunction = function(formid) { 
    var jForm = $(formid); 
    // .... 
} 

$(function() { 
    myFunction("#uploadform"); 
}); 
$(function() { 
    myFunction("#uploadform2"); 
}); 
相關問題