如何在呼叫链中进一步取消其他onclick函数调用?

时间:2012-06-29 19:58:04

标签: javascript internet-explorer events javascript-events onclick

我有一个带有此onclick属性的元素:

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

我添加了第一个函数,如果合适,我想要执行第二个函数。我基本上需要为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的问题,我已经解决了几个变化,但我仍然执行第二个功能。

我错过了什么?

我将在这个应用程序中传播这些按钮,并且它们调用不同的框架模态,因此我希望能够使用新函数为这些onclick添加前缀,这将阻止进一步的onclick函数执行(如果适用)。 / p>

1 个答案:

答案 0 :(得分:1)

如果你的onclick事件处理程序(ieDisabledBtn(); widgetPayTotalDue.show();)中有两个语句,它们都会被调用。 onclick属性大致转换为:

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

因此,当您希望调用ieDisabledBtn()时,您需要true返回widgetPayTotalDue.show(),这意味着:

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

或:

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

最好只有一个函数绑定到一个事件,为简单起见,如果你可以帮助它。然后,您可以使该功能执行您喜欢的任何操作并保持其可读性。