1

AJAX呼び出しによって生成および返されるweb2py SQLFORMがあり、フォームは定義したDIVに配置されます。そのSQLFORMを挿入フォームではなく更新フォームにしたいです。問題は、フォームがその DIV に書き込まれると、受け入れ機能をすぐに実行することです。フォームが挿入用で、更新のみの場合、これは発生しません。その最初の承認は失敗し、送信ボタンを押しても 2 回目の承認は許可されません。なぜ受け入れが失敗するのか、なぜすぐに起こるのかわかりません。

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 を開きます。うまくいきません。何が起こっているのかわかりません。これに対する説明の一部はありますか?

4

1 に答える 1

0

iFrame メソッドを使用して、実際にこれを機能させました。引用符が必要なjQueryと引用符が必要なiFrame URLをiFrameに追加する必要があるため、表記法はかなり混乱しましたが、実行可能です。このように見えました:

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

きれいではありませんが、機能します。

于 2013-07-23T17:05:52.600 に答える