jQuery事件,回调和$(this)

时间:2012-06-25 23:22:06

标签: jquery

我有一个函数,我用它作为自定义事件的回调:

function checkNCreateTb() {
        var tbName = $(this).attr('href').replace('content','orders')
        /*...*/
}

我使用 .on()来处理将回调该功能的事件

$('#group-pills a').on('shown', checkNCreateTb)

我需要在用户第一次单击DOM的另一部分中的按钮时应用相同的功能。我解决了将点击事件附加到按钮并触发显示的事件。但是,我认为这看起来非常难看,有没有更好的方法来获得相同的结果?

代码:

$('button#action-button').on('click',function() {
    $('#group-pills a:first').trigger('shown')
    $(this).off('shown') //removing the handler
})

//Create the DataTable if it wasn't already created
$('#group-pills a').on('shown', checkNCreateTb)

1 个答案:

答案 0 :(得分:0)

我会使用$.proxy创建一个函数引用,this设置为特定值:

$("#action-button").on("click", $.proxy(checkNCreateTb, $("#group-pills a:first")));

或者,使用call设置thischeckNCreateTb的值:

$('#action-button').on('click',function() {
    checkNCreateTb.call($("#group-pills a:first"));
});

作为旁注,您不需要在#id选择器前添加标记名称前缀,因为id是您可以获得的特定内容,jQuery将在document.getElementbyId下使用{{1}}罩。