2013-02-07 21 views
3

我試圖提交一個表單,其中包含通過Ajax/jQuery上傳的文件,通過PHP腳本處理表單,並將結果返回到div最初的形式住在使用jQuery/Ajax提交表單僅適用於其他任何時間

我目前的形式代碼:

<section id="content-right"> 
<form name="uploader" id="uploader" method="POST" enctype="multipart/form-data"> 
    <input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="10485760" /> 
    <input type="file" name="fileselect" id="fileselect" /> 
    <input type="submit" name="submit" id="submit" value="Upload" /> 
</form> 
</section> 

而且我現在的阿賈克斯/ jQuery腳本是:

<script> 
$(function() { 
$('#uploader').submit(function() { 
     $(this).ajaxSubmit({ 
      type: $(this).attr('method'), 
      url: 'upload-song.php', 
      success: function(response) { 
       $('#content-right').html(response); 
       } 
      }); 
    return false; 
    }); 
}); 

我的PHP腳本是「upload-song.php」(細節無關緊要)。我也有YUI.Pjax運行處理正常的導航(HREF)鏈接並加載#內容右(如果用戶點擊任何東西,我希望它加載#內容右)中的那些。

通過這種設置,通過正常鏈接導航完美地工作,一切都加載#內容 - 正確,但上傳只能在其他時間。

例如,上傳器會在#content-right中加載upload-song.php並完美處理所有內容,然後如果我離開頁面並嘗試上傳另一個項目,它將無法工作,它會只需刷新頁面(如果我將action =「upload-song.php」放在表單標籤中,它會將upload-song.php作爲整頁加載,而不是#content-right)。刷新頁面後,我可以上傳另一個項目,它將完美工作。

我認爲這與我如何附上我的阿賈克斯腳本的形式提交(因爲如果我刷新頁面,它完美的作品)做的,但我沒有很多的這些語言的經驗,所以我我不知道如何解決它。

此外,如果我禁用YUI.Pjax它修復了上傳器,但顯然打破了我的鏈接,所以我正在尋找工作。

任何想法?

+0

是每次調用PHP頁面還是確定問題出在javascript中? – SISYN

+0

每次通過Ajax/jQuery都不會調用PHP頁面。它每隔一段時間都會被調用。如果我向表單字段添加一個動作標籤,它將通過Ajax提交表單,然後通過動作標籤提交表單,但是如果我將動作標籤留出,它只會刷新頁面。正如我所說,我認爲一個解決方法將是可能的JavaScript內,但這是由於我無法弄清楚該JavaScript和YUI.Pjax(如果我禁用YUI.Pjax)的衝突,上傳腳本工作100%的時間。 – Andrew

回答

5

試試這個:

$(document).on("submit", "#uploader", function() ... 

這句法會讓提交事件冒泡到文檔中。這樣,當#content_right部分重新加載時,文檔保留了DOM就緒功能中設置的事件監聽響應。

+1

謝謝!你是上帝。 (我會upvote這個,但我沒有足夠的聲譽) – Andrew

+1

謝謝。請付你的十分之一! :) –

相關問題