2016-01-08 50 views
-1

我有以編程方式點擊.special鏈接觸發的此代碼。如何在事件之外的jQuery中引用'this'?

$(document).ready(function(){$('.special').trigger('click');}); 
$(document).on('click', '.special', function(){ 
    var url = $(this).attr('href'); 
    // More code that might depend on $(this) 
}); 

on click事件相同的代碼時以上用戶手動點擊其它鏈路也被觸發。所以,在頁腳的某個地方我也有這個代碼。

$('.manual').on('click', function() { 
    var url = $(this).attr('href'); 
    // More code that might or might not depend on $(this) 
}); 

我的問題是,我必須把相同的代碼在兩個地方(.manual以及.special鏈接)。爲了避免代碼重複,我用以下代碼替換了手動代碼並刪除了上述特殊事件。

$(document).on('click', '.manual,.special', function(){ 
    var url = $(this).attr('href'); 
    // More code that might depend on $(this) 
}); 

但是,上述代碼停止工作在.special鏈接。我的問題是,如果有某種方法,我可以將$(this)引用稱爲外部函數。沿

function whenClicked() { 
    var url = $(this).attr('href'); 
    // More code that might depend on $(this) 
} 

東西線和調用whenClicked功能是這樣的:

$(document).on('click', '.special', function(){ 
    whenClicked(); 
}); 

$('.manual').on('click', function() { 
    whenClicked(); 
}); 

雖然這將是比較理想的,如果我能以某種方式結合兩個.manual.special作爲一個像我上面試過。

+1

你問過把'this'作爲參數傳遞給函數嗎? – Script47

+0

是的,我想。我所需要的是,代碼在這兩個鏈接上都能正常工作而不會發生重複。 –

+0

你可以使用傳遞給它的回調函數。 – Script47

回答

4

有幾種方法,你如何能做到這

- 傳球功能參考$.on

$(document).on('click', '.special', whenClicked); 

- 使用.call.apply

$(document).on('click', '.special', function(){ 
    whenClicked.call(this); 
}); 

- 通過this作爲參數

$(document).on('click', '.special', function(){ 
    whenClicked($(this)); 
}); 

function whenClicked($element) { 
    var url = $element.attr('href'); 
} 
0

如何簡單地傳遞所需的元素作爲參數?

function whenClicked($element) { 
    var url = $element.attr('href'); 
    // More code that might depend on $(this) 
} 

注:我假設一個jQuery元素在這個例子中

其他DOM元素

function whenClicked(element) { 
    var url = $(element).attr('href'); 
    // More code that might depend on $(this) 
} 
0

this範圍阻止你想什麼;但你可以很容易地解決它。

你的函數應該有一個參數(下面選擇「t」)。

function whenClicked(t) { 
    var url = t.attr('href'); 
    // More code... 
} 

然後你應該通過$(this)作爲你調用該函數的參數。

$(document).on('click', '.special', function(){ 
    whenClicked($(this)); 
}); 

$('.manual').on('click', function() { 
    whenClicked($(this)); 
}); 
相關問題