我有一个web2py SQLFORM,它由AJAX调用生成并返回,表单放在我定义的DIV中。我希望SQLFORM是一个更新表单,而不是插入表单。问题是表单一旦写入DIV就会立即运行它的accept函数。如果表单用于插入,仅更新,则不会发生这种情况。初始接受失败并按下提交按钮不允许第二次接受。 我不知道为什么接受失败或为什么会立即发生。
继承了进行AJAX调用的JavaScript函数
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 :(得分:0)
通过使用iFrame方法,我实际上得到了这个。由于它需要iFrame附加需要引号的jQuery和也需要引号的iFrame URL,因此符号变得非常混乱,但它是可行的。看起来像这样:
var myURL = "{{=URL('editEntry')}}/"+idArg.toString();
$('#window').append("<iframe src = " + myURL + " width='450' height='400'> </iframe>");
它不漂亮但它有效。