1

入力データを含むフォームがあります。お気に入り

<form id = 'myform'>
...
            <td><input type="checkbox" name="supplier_aid" value="on" checked disabled >{$output.t_artikelnr}</td>
            <td><input type="checkbox" name="descshort" value="on">{$output.t_kurztext}</td>
            <td><input type="checkbox" name="buyer_aid" value="on">{$output.t_sap_materialnr}</td>
...
</form>

ドキュメントの準備ができたら、デフォルトの送信関数を自分の関数に置き換えます(唯一の方法は、レガシーコードが再び攻撃する...)

document.myform.submit = function (){
 //do some stuff..

//and eventually

return true;
}

しかし、今ではフォームの送信は行われません...送信動作を元に戻す方法を知っている人はいますか?

ここにjs全体があります

<script type="text/javascript">
       $(document).ready(function(){


        document.articlelistform.progress = {};     
        document.articlelistform.progress.update = function(){
            var variables = document.articlelistform.progress;
            var state = variables.data.done / variables.data.togo;    
            if(document.articlelistform.progress.lock){
                 variables.bar.updateProgress(state,'{/literal}{$output.m_queue_progress_message_status}{literal}')
                 return;
            }


            if(typeof(variables.togo) =='undefined'){
                variables.togo = 5;
                }
            switch(variables.data.state){
                case 'inQue':

                        variables.bar.updateProgress((5 - variables.togo) / 5,'{/literal}{$output.m_queue_progress_message_gathering}{literal}');   
                        variables.togo--;
                        if(variables.togo <= 0) variables.togo = 5;
                        document.articlelistform.submit(variables.data);

                    break;
                case 'inProcess':
                    if(variables.togo <= 0 || variables.data.update){
                        variables.togo = 5;
                        variables.bar.updateProgress(state,'{/literal}{$output.m_queue_progress_message_genarating}{literal} '+ variables.data.done + '/' + variables.data.togo);   
                        document.articlelistform.submit(variables.data);

                    }else variables.togo--;

                    break;
                case 'downloadDone': 
                        variables.bar.updateProgress(1,'{/literal}{$output.m_queue_progress_message_download}{literal}!');   
                            if(window.location != 'failed'){
                                window.location = variables.data.location;
                                clearInterval(variables.ticking);
                                delete variables.ticking;
                                variables.togo = 5;
                                variables.state = 'new';
                            }else{
                                document.articlelistform.progress.bar.updateProgress(1,'{/literal}{$output.m_queue_progress_message_networkerr}{literal}!');
                            }
                       break;
                 case 'error' :
                     clearInterval(variables.ticking);
                     delete variables.ticking;
                     variables.togo = 5;
                     variables.state = 'error';
                     document.articlelistform.progress.bar.updateProgress(1,'{/literal}{$output.m_queue_progress_message_server_error}{literal}');
                     document.articlelistform.submit(variables.data);
                     break;

            }
        }

        document.articlelistform.submit = function(data){
            var settings = document.articlelistform.progress;
            settings.lock  = true;

            if(typeof(data) == 'undefined') data = {state:'new'};

            if(typeof(settings.data) != 'undefined')
            if(settings.data.state == 'downloadDone'){
               window.location = settings.data.location; 
               return false;
            }
            if(typeof(data) == 'object')
                if(data.state == 'error') document.articlelistform.submit()

            $('#formSettings').val(JSON.stringify(data));       
            $.ajax({
                type: "POST",
                url: 'ajax-backend/downloadCatalogueProgress.php',
                data:   $(this).serialize() ,

                success: function(data){

                    settings.lock  = false;
                    if(!data.error){

                        if((data.state == 'inQue' && typeof(settings.bar) == 'undefined')||data.progress){
                            delete data.progress;
                            $('#catalogMessageHolder').html('');
                            settings.bar = new Ext.ProgressBar({
                                renderTo: 'catalogMessageHolder',
                                value: 0.1,
                                width: 200,
                                maxValue:60,
                                minValue: 0,
                                text : '{/literal}{$output.m_queue_progress_message_genarating}{literal}.'

                            });
                            settings.data  = data;     
                            document.articlelistform.progress.ticking  = setInterval(settings.update, 1000, data, true);
                        }else{
                            settings.data  = data;
                        }
                        $('#cataloLoaderHolder').show();

                    }else{
                    //@todo: implement a warning message
                    }

                },
                failure: function(){
                 document.articlelistform.progress.bar.updateProgress(1,'{/literal}{$output.m_queue_progress_message_networkerr}{literal}!');
                } 
            });

            return true; 
        };
    });

    </script>
4

3 に答える 3

1

上司から変更の許可を得ることができました。

そして、彼が私にそれを変更してほしくない理由がわかりました... 20か所ほどハードコードされています....すべてを変更しました。js 呼び出しを jquery 呼び出しで変更しただけで、すべて正常に機能しました。なぜそれが早くうまくいかないのか分かりません。しかし、これは関数を呼び出したクリックです

> <td class="blue" background="gfx/buttonb.gif" align="center"
> valign="center"><nobr><a  href="javascript:void(0)" class="blue"
> onclick="if (!(document.articlelistform.catalogpartner3200.checked ||
> document.articlelistform.catalogpartner3582.checked ||
> document.articlelistform.catalogpartner5320.checked ||
> document.articlelistform.catalogpartner5109.checked ||
> document.articlelistform.catalogpartner4774.checked ||
> document.articlelistform.catalogpartner3271.checked ||
> document.articlelistform.catalogpartner3526.checked ||
> document.articlelistform.catalogpartner5544.checked ||
> document.articlelistform.catalogpartner3494.checked ||
> document.articlelistform.catalogpartner3416.checked ||
> document.articlelistform.catalogpartner4439.checked ||
> document.articlelistform.catalogpartner5328.checked ||
> document.articlelistform.catalogpartner5329.checked ||
> document.articlelistform.catalogpartner3267.checked ||
> document.articlelistform.catalogpartner3512.checked ||
> document.articlelistform.catalogpartner2848.checked ||
> document.articlelistform.catalogpartner3417.checked ||
> document.articlelistform.catalogpartner3491.checked ||
> document.articlelistform.catalogpartner3492.checked ||
> document.articlelistform.catalogpartner5554.checked ||
> document.articlelistform.catalogpartner5591.checked ||
> document.articlelistform.catalogpartner5611.checked ||
> document.articlelistform.catalogpartner3517.checked ||
> document.articlelistform.catalogpartner5305.checked ||
> document.articlelistform.catalogpartner3532.checked ||
> document.articlelistform.catalogpartner5077.checked ||
> document.articlelistform.catalogpartner3581.checked ||
> document.articlelistform.catalogpartner3507.checked ||
> document.articlelistform.catalogpartner3579.checked ||
> document.articlelistform.catalogpartner3489.checked ||
> document.articlelistform.catalogpartner3490.checked ||
> document.articlelistform.catalogpartner5306.checked ||
> document.articlelistform.catalogpartner5598.checked ||
> document.articlelistform.catalogpartner5191.checked ||
> document.articlelistform.catalogpartner3305.checked ||
> document.articlelistform.catalogpartner3578.checked ||
> document.articlelistform.catalogpartner3580.checked ||
> document.articlelistform.catalogpartner4934.checked ||
> document.articlelistform.catalogpartner4437.checked ||
> document.articlelistform.catalogpartner3568.checked ||
> document.articlelistform.catalogpartner4079.checked ||
> document.articlelistform.catalogpartner3723.checked ||
> document.articlelistform.catalogpartner5321.checked ||
> document.articlelistform.catalogpartner3569.checked)) {alert('Sie
> müssen mind. 1 Katalog auswählen');  } else { if
> (!(document.articlelistform.supplier_aid.checked ||
> document.articlelistform.descshort.checked ||
> document.articlelistform.buyer_aid.checked ||
> document.articlelistform.desclong.checked ||
> document.articlelistform.keywords.checked ||
> document.articlelistform.manufacturer_name.checked ||
> document.articlelistform.delivery_time.checked ||
> document.articlelistform.remarks.checked ||
> document.articlelistform.reference_feature_group_id.checked ||
> document.articlelistform.order_unit.checked ||
> document.articlelistform.content_unit.checked ||
> document.articlelistform.quantity_min.checked ||
> document.articlelistform.quantity_interval.checked ||
> document.articlelistform.price_amount.checked ||
> document.articlelistform.special_treatment_class.checked ||
> document.articlelistform.mimeinfo.checked ||
> document.articlelistform.sicherheitsdatenblatt.checked )) {alert('Sie
> müssen mind. 1 Auswahlkriterium wählen!');  } else {
> $('#catalogDownloadForm').submit(); } } return false;" onMouseOver=
> "window.status='Als CSV-Datei downloaden'; return true;"
> onMouseOut="window.status=''; return true;">&nbsp;Als CSV-Datei
> downloaden&nbsp;</a></td>

コードはナッツです....からdocument.articlelistform.submit()に変更したところ $('#catalogDownloadForm').submit()、すべてが正常に機能しました..そうでなければ失敗する理由がわかりません。

于 2013-01-21T14:54:08.873 に答える
0

onsubmit イベント ハンドラを宣言していません。submit 自体を再宣言しています!!!

だから、あなたは本当にやりたかった:

document.myform.onsubmit = function(){
  // do some stuff...
  // and eventually
  return true;
};

あなたがしたように見えますが、そうでなければ何も返す必要はありdocument.myform.submitません。

これが意図的なものである場合 (eek!)、再定義する前document.myform.submitに保存する必要があります。

document.myform.originalSubmit = document.myform.submit;
document.myform.submit = function (){
  //do some stuff..
  //and eventually
  document.myform.originalSubmit();
};

これは、フォームに関連付けられているイベント ハンドラーをバイパスするため、他のコードとうまく連携しないため、それが本当に必要なものかわかりません。

于 2013-01-21T09:56:03.967 に答える
0
document.myform.submit = function (event) {
    // init event if undefined
    if (!event) var event = window.event;
    if (doNotSubmit) {
        event.preventDefault();
        // form won't be submitted
    } else {
        // will automatically submit, no need to return anything
    }
}

編集

明らかに、jQuery を使用しています。次に、別のソリューションが機能する可能性があります。

$("#myForm").on("submit", function() {
    if (doNotSubmit) {
        return false;
        // form won't be submitted
    } else {
        return true;
        // form will be submitted
    }
});
于 2013-01-21T09:47:03.140 に答える