0

jQuery のライブ クエリ プラグインを使用して動的な動作をフォーム要素にアタッチし、ajax フォームを作成しています。私が直面している問題は次のとおりです。

要素に対して再度 livequery を呼び出さない場合、submit への応答で、新しくロードされたフォームが必要な動作を取得しません。ただし、もう一度送信して livequery を呼び出すと、フォームが複数回送信されます。

実際、カウントは毎回増加します。期限切れを使用してみました。しかし、それはまったく役に立ちません。これを達成する方法についてのコメント。

私がやろうとしているのは、クラス js-ajax-form を ajax を介して送信されるフォームとしてすべてのフォームを作成することです。結果のコンテンツも、同じ動作を保持するフォームです。つまり、ajax を介して送信する必要があります。

ご指導いただければ幸いです。

$.fn.fajaxform = function() {
        var container = null;
        $(this).livequery(
                'submit',
                function(e) {
                    var $this = $(this);
                    container = $this.parent();
                    $this.ajaxSubmit({
                        beforeSubmit : function(formData, jqForm, options) {
                            $('input:file', jqForm[0]).each(function(i) {
                                if ($('input:file', jqForm[0]).eq(i).val()) {
                                    options['extraData'] = {
                                        'is_iframe_submit' : 1
                                    };
                                }
                            });

                            container.block({
                                message : '<h1><img src="/img/busy.gif" /> Loading please wait...</h1>'

                            });

                        },
                        success : function(responseText, statusText) {

                            redirect = responseText.split('*');
                            if (redirect[0] == 'redirect') {
                                location.href = redirect[1];
                            } else if ($this.metadata().container) {
                                $('.' + $this.metadata().container).html(
                                        responseText);

                            } else {
                                $this.parents('div.js-responses').eq(0).html(
                                        responseText);
                            }


                            $('.js-ajax-form').each(
                                function()
                                {
                                    if (this.expire)
                                    {
                                        this.expire();
                                    }
                                }
                            );
                            $('.js-ajax-form').fajaxform();
                            container.unblock();
                        }
                    });
                    return false;
                });
    };
4

2 に答える 2

0

ここで腰から撮影するだけです:スクリプトは複数回含まれていますか?同じスクリプトを誤って数回(requireJSを使用して)ロードすると、イベントが複数回発生するという問題が発生しました。

于 2011-06-21T09:50:42.513 に答える
0

jQueryの最新バージョンにアップグレードした後、問題は解決しました。livequery が活発に開発されていないことを考えると、.live は最初からより良いオプションであった可能性があると思います。

于 2011-07-15T21:49:22.270 に答える