如何取消调用链下游的其他 onclick 函数调用

How do I cancel other onclick function calls further down the call chain?

本文关键字:其他 函数调用 onclick 调用 何取消 取消      更新时间:2023-09-26

我有一个具有此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函数在适当的情况下执行。

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

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

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

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

或:

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

为了

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