0

この onclick 属性を持つ要素があります。

onclick="ieDisabledBtn(); widgetPayTotalDue.show();"

最初の関数を追加しましたが、必要に応じて 2 番目の関数を実行したくありません。基本的に、IE 用にいくつか微調整する必要があります (読み取り専用にすることで無効化されたボタンを偽造しますが、クリック可能にはしません)。IE は無効化されたボタンのテキストに対して灰色のテキストをレンダリングするため、無効化されたボタンを使用できません。無効化されたボタンを使用できません。

ここでは、IE の偽の無効化ボタンを設定しています。

    (function() {
    var $disabled_btns = $('button[disabled]');

    if ($disabled_btns && $.browser.msie) {
        $disabled_btns.each(function() {
            $(this)
                .removeAttr('disabled')
                .attr({
                    'readonly': 'readonly',
                    'disabledIE': true //set a flag, used in ieDisabledBtn()
                })
                .click(function() {
                    $(this)
                        .removeClass('ui-state-focus') //don't want this button style
                        .find('span').css({ //need to shift text so it stays in same position
                            'position': 'relative',
                            'top': '-1px;',
                            'left': '1px;'
                    });

                    return false;
                }); //end click
        }); //end each
    } //end if
})();

ここに私の ieDisabledBtn 関数があります:

function ieDisabledBtn(e) {
    //we only care about IE
    if ($.browser.msie){
        var e       = window.event,
            btn     = e.srcElement;

        //yes, we're a disabled IE btn, stop any other onclick events bound to this btn from firing
        if (btn.getAttribute('disabledIE')) { 
            e.returnValue   = false;
            e.cancelBubble  = true;

            return false;
        }
    }
}

確かに e.returnValue = false を設定するだけの問題だと思いました。いくつかのバリエーションを試しましたが、まだ2番目の関数が実行されています。

私は何が欠けていますか?

これらのボタンをこのアプリ全体に広げ、さまざまなフレームワーク モーダルを呼び出すので、これらの onclick の前に新しい関数を追加して、必要に応じて onclick 関数の実行を停止できるようにしたいと考えています。

4

1 に答える 1

1

onclick イベント ハンドラ ( ieDisabledBtn(); widgetPayTotalDue.show();) に 2 つのステートメントがある場合、それらは両方とも呼び出されます。onclick 属性は、大まかに次のように変換されます。

function()
{
  ieDisabledBtn();
  widgetPayTotalDue.show();
}

したがって、呼び出されたいときieDisabledBtn()に戻る必要があります。つまり、次のことを意味します。truewidgetPayTotalDue.show()

function()
{
  if(ieDisabledBtn())
  {
    widgetPayTotalDue.show();
  }
}

また:

onclick="if(ieDisabledBtn()) widgetPayTotalDue.show()"

簡単にするために、イベントにバインドする関数は 1 つだけにすることをお勧めします。次に、その関数を好きなように実行させ、読みやすくすることができます。

于 2012-06-29T21:13:11.133 に答える