2011-06-17 31 views
0

我有一個MvcContrib Html.Grid項目。每個網格一行,我有一個「刪除按鈕」,這實際上是一個風格錨點<a>。如果您點擊遠離錨點的柵格,則會觸發一個動作,顯示所選項目的詳細信息。如果點擊網格行內的錨點,則細節動作觸發(第一個),刪除動作觸發(第二個)。通過調試器,這兩個操作都在同時執行從細節開始。這在某些情況下會導致空引用異常。在gridlink上使用錨點觸發gridlink.click()和anchor.click()動作

我搞砸了event.preventDefault()和其他一些技術來試圖阻止兩個被點擊錨時被解僱,但我似乎無法弄清楚。有沒有人有這方面的見解?我應該爲每一行使用實際的<input type="button" />嗎?

這裏是關於網格行我 「按鈕」:

column.For(s => "<a class=\"delete fg-button ui-state-default fg-button-icon-left ui-corner-all\" href=\"#\"><span class=\"ui-icon ui-icon-trash\"></span>Delete</a>").Named("").DoNotEncode(); }) 

這裏有兩個事件觸發:

$(".gridlink").click(function() { getDetails($(this)); }); 

$("#subscriptions table.grid tbody > tr .fg-button.delete").live('click', deleteHandler); 
+0

我的空引用異常是由於我的詳細信息操作中缺少邏輯引起的。我發現防止兩個事件同時發生的唯一方法是將其中一個更改爲dblclick()...在我的控制器中修復邏輯之後,我可以將它們作爲click()離開。 – BueKoW 2011-06-17 14:54:25

回答

1

你可以嘗試stopping the event from bubbling

$('#subscriptions table.grid tbody > tr .fg-button.delete').live('click', function(evt) { 
    deleteHandler(); 
    evt.stopPropagation(); 

    // preventing the default action might not actually be necessary in this case 
    // as your delete anchor href points to # so there is no default action. 
    evt.preventDefault(); 
}); 

遠作爲.gridlink點擊擔心您可能需要做同樣的事情。

+0

這是一個很好的說明,可能適用於其他類似的情況,但它在這裏沒有幫助。文檔讀取stopPropogation()不適用於.live()事件。在這裏,我需要停止$(「。gridlink」)。click()事件並僅觸發delete.click()。我使用.live()的方式可能不適合我。 – BueKoW 2011-06-17 13:27:47