2013-07-20 76 views
1

我有一個web2py SQLFORM生成並通過AJAX調用返回並將窗體放入我定義的DIV中。我希望SQLFORM是更新窗體,而不是插入窗體。問題是表單一旦寫入DIV就立即運行它的接受函數。如果表單僅用於插入,則不會發生這種情況,只能進行更新。初始接受失敗,點擊提交按鈕不允許第二次接受。 我不知道爲什麼接受失敗或爲什麼立即發生。web2py SQLFORM接受太快

繼承人的JavaScript函數,使AJAX調用

function displayForm(currID){ 
    //Remove everything from the DIV we want to use 
    $('#window').empty(); 
    //Call the ajax to bring down the form to update the series 
    ajax('{{=URL('newForm')}}/'+currID, 
    [], 'window'); 
} 

這裏是newForm控制器

def newSerForm(): 
record = db.myTable(request.args[0]) 
form = SQLFORM(db.myTable, record, fields=['series_name','image_thumbnail']) 
if form.accepts(request.vars,session): 
    print 'Series update successful!' 
else: 
    print 'Series update Failed...' 
return form 

displayForm通過點擊一個按鈕激活,一旦你做的形式接受和失敗,提交按鈕不能再工作。有沒有辦法讓SQLFORM做到這一點?奇怪的是,如果我改變這個插入到myTable中,它可以正常工作。它的行爲與其應該完全相同。但這樣做並不行。

好吧,現在這是它變得奇怪。 我試圖用完全不同的方法實現相同的功能,即一個iFrame。我在創建基於request.args [0]的表單的控制器中創建了新的函數。看起來像這樣

def editEntry(): 
print request.args[0] 
record = db.myTable(request.args[0]) 
form = SQLFORM(db.CC_user_submission, record, fields=['series_name', 'image_thumbnail']).process() 
return dict(form=form) 

然後一個相應的HTML頁面,只是顯示窗體。什麼可能更簡單的權利?我根據提供正確參數的鏈接轉到該頁面。帶我到一個帶更新表格的頁面。更新完美。太好了,現在讓我們把它放在一個iFrame中,而不是鏈接到它。我把它放在原始頁面上的iFrame中。打開iFrame。不起作用。我不知道發生了什麼,有沒有解釋的一部分?

回答

0

通過使用iFrame方法,我實際上得到了這個工作。由於它需要一個iFrame附加需要引號的jQuery以及需要引號的iFrame URL,所以這個表示很困惑,但它是可行的。看起來像這樣:

var myURL = "{{=URL('editEntry')}}/"+idArg.toString(); 
$('#window').append("<iframe src = " + myURL + " width='450' height='400'> </iframe>"); 

這不是很漂亮,但它的工作原理。