0

この質問の続き

編集

JSFミドルコード

コードを実行してもわかるように、ボタンのテキストは変更されず、onclick がクリック機能をオーバーライドしています。関数からフォーム id 属性を削除し、html タグから onclick 属性を削除すると、コードは期待どおりに機能します (実際のシナリオでは、onclick 関数はボタンではなく送信ボタンを意味します)。

編集を終了

インライン イベントが指定されたときに JQuery が click() イベントを発生させないのはタイプミスのせいだと思っていましたが、もう一度問題に遭遇しました。これが私のコードと問題のタグです

<input id="submit1" type="button" onclick="this.disabled=true; doSubmit();" value="submit">


<script>myfunction('submit1', 'working', myformID)</script>

var myfunction = function(ID , text , formID) {
if(ID) {
    var element = document.getElementById(ID);
    if(formID) {
        var form = document.getElementById(formID);
    }
    if (element) {
        jQuery(element).click( function() {
            if(jQuery(this).attr('disabled')) {
                return false;
            }
            jQuery(this).attr('disabled' , 'disabled');
            jQuery(this).attr('value' , processingText);
            onclick = (jQuery(this).attr('onclick') || jQuery(this).attr('onClick'));
            if(form && !onclick) {
                jQuery(form).submit();
            } 
            jQuery(this).click();
        });
    }
}
};

この場合のように、doSubmitの場合にonclick属性を機能させたまま、送信ボタンを無効にする関数を作成するためにjavascriptを使用しています。フォーム ID が設定されていて、既存の onclick がない場合は、フォームを送信します。したがって、html タグに問題がある場合は、JS でそれを修正する一般的な方法が必要です。

よろしくお願いします

4

1 に答える 1

3

インライン ハンドラーはボタンを無効にします。this.disabled=true;

次に、jQuery ハンドラーが無効になっているかどうかを確認し、無効になっている場合は戻ります。

if(jQuery(this).attr('disabled')) {
      return false;
}

残念ながら、同じ要素の同じイベントに対するイベント ハンドラーの実行順序を予測する方法はありません。

簡単な修正として、これを提案できます。

デモ

jQuery(element).click( function() {
    if(jQuery(this).attr('disabled-by-jquery')) {
        return false;
    }
    jQuery(this).attr('disabled' , 'disabled');
    jQuery(this).attr('disabled-by-jquery' , 'disabled');
    jQuery(this).attr('value' , text);
    onclick = (jQuery(this).attr('onclick') || jQuery(this).attr('onClick'));
    if(form && !onclick) {
        jQuery(form).submit();
    } 
    jQuery(this).click();
});
于 2013-07-10T08:19:47.197 に答える