2010-10-12 55 views
3

如何獲取點擊鏈接的引用來刪除正確的行?你如何找到哪個鏈接被點擊?

<tr> 
<td>c1r1</td> 
<td>c2r1</td> 
<td><a href="javascript:delete_row();">delete</a></td> 
</tr> 

<tr> 
<td>c1r2</td> 
<td>c2r2</td> 
<td><a href="javascript:delete_row();">delete</a></td> 
</tr> 

function delete_row() { 
    this.parent().parent().remove(); 
} 

我知道我可以使用(jQuery中)

$('a').click(function() { 
    this.parent().parent().remove(); 
} 

甚至這個

$('a').live('click', function() { 
    this.parent().parent().remove(); 
}); 

要綁定功能,動態創建的鏈接。

但我正在尋找的方式來獲得沒有jQuery的點擊鏈接的引用。我正在使用jQuery 裏面的這個函數,但那不是重點。

編輯 許多人建議在功能參數使用this,我已經試過了,但它返回window

<a href="javascript:delete_row(this);">delete</a> 

function delete_row(elem) { 
    console.log(elem); 
} 

Firebug console: Window config_maker.php 

回答

11

相反,所有其他的答案,你不能在這種情況下,通過this ,因爲那是指window對象而不是鏈接。爲什麼?因爲你沒有使用事件處理程序。您正在使用javascript:協議。不要使用它來調用你的函數,而是使用事件處理程序。更改鏈接到這一點,你會很直接...

<a href="javascript:void(0);" onclick="delete_row(this);">delete</a> 

這仍然很不理想,因爲unobtrusive Javascript是去這些天的方式。但這至少會讓你的代碼工作。

+0

最後(不顯眼)的評論+1,我真的希望成爲一個公理javascript的上下文。 – 2010-10-12 14:16:39

+0

@Mark Yeah相信我,當我輸入'javascript:void(0);'我已經很長時間了! – 2010-10-12 14:17:42

+0

謝謝!另外,我還記得我在jquery早期看到一個教程,它與'target'混淆,並以某種方式發現了'a',但是我失去了它並且無法再找到它。 – 2010-10-12 14:19:53

1

您可以通過使用this參考。

<a href="javascript:delete_row(this);"> 
+3

我沒有嘗試,但它仍然會返回'window' – 2010-10-12 14:03:46

+0

它不應該,發佈您的'delete_row'代碼。 – 2010-10-12 14:06:43

+1

嘗試使用onclick,我很確定這將指向鏈接。 – 2010-10-12 14:09:51

-1

使用this

<a href="javascript:delete_row(this);"> 
-1

你就不能使用this作爲函數的參數?

<a href="javascript:delete_row(this);">xxx</a> 

而且在Javascript:

function delete_row(clickedLink) { 
    ... 
} 
-1

使用...

function delete_row(link) { 
    link.parent().parent().remove(); 
} 

然後調用javascript:delete_row(this);

0
<tr id='row1'><td><a rel="row1" href="javascript:delete_row('row1');">delete</a></td></tr> 

<tr id='row2'><td><a rel="row2" href="javascript:delete_row(this.rel);">delete</a></td></tr> 

...

function delete_row(varID) { 
document.getElementById(varID).remove(); 

}

function delete_row(varID) { 
$('#'+varID).remove(); 

}

-1

只是檢查處理函數裏面this對象

使用:this.id

0

這可以幫助你

document.addEventListener("click", listener); 
function listener(event){ 
    if(event.target.nodeType != 'a') return false; 
    document.remove(event.target.parentNode.parentNode); 
}