2013-07-26 60 views
1

單擊事件我有一個click事件的 「A」 元素:防止toggleClass

<a href="#" class="edit-row">Edit</a> 

我已經附上點擊事件給這個元素:

$(document).on('click', "a.edit-row", editRow); 

當點擊編輯按鈕editRow函數被調用。此功能改變編輯< a>元素:

$(this).find("a.edit-row").html("Save").removeClass("edit-row").addClass("save-row").off('click').click(saveRow); 

這一切工作正常。

當點擊「保存」時調用saveRow函數。在此功能中,我想恢復到「編輯」按鈕。

這是我用來實現這一目標的版本之一:

$(this).off('click').html("Edit").toggleClass("save-row").toggleClass("edit-row"); 

我已經試過幾件事情其他事情也是如此。但是,點擊保存後會發生什麼變化以進行編輯,但是會立即變回保存。

它看起來像$(document)部件中的click事件被觸發。但是,我似乎無法禁用或阻止此類點擊事件在更改類時觸發。一旦它被再次點擊,它就需要觸發,而不是在toggleClass()上。

我在這裏錯過了什麼?

+1

你能建立一個小提琴? –

回答

0

你的問題是,你的點擊處理程序安裝到document然後試圖從this這不是document刪除它,它的點擊a標籤。根據我的理解,您需要刪除document上的點擊處理程序,而不是從this。但是我確實認爲你會在這方面有所作爲,只需要有兩名處理者並將課堂交換出去就很簡單。

+0

原來我使用的是錯誤的選擇器。上面的答案幫了我的忙:我需要在'document'上禁用處理程序,然後才能工作。我仍然覺得使用'toggleClass'觸發點擊事件很奇怪嗎?謝謝Jonny。 –

+0

做了一些調整,第一個解決方案不是很令人滿意,你們有些人明確表示我的編碼確實很難。我在初始化dataTables表後,用簡單的'$(tableId).find(「。edit-row」)。on('click',editRow)'替換了所有'$(document)'代碼。這種方式使用'toggleClass'效果更好,事情更簡單。所以簡化是非常有用的! –

2

我想你已經過了複雜的事情。它看起來像你需要的是兩個獨立的處理程序,一個用於edit-row,另一個用於save-row。你根本不應該刪除點擊處理程序。

$(document).on('click','a.edit-row', function() { 
$(this).toggleClass('edit-row save-row').html('Save'); 
//do other stuff in your editRow function 
}); 

$(document).on('click','a.save-row', function() { 
$(this).toggleClass('edit-row save-row').html('Edit'); 
//do other stuff in your saveRow function 
}); 

你可以在這裏看到一個小提琴的例子。 http://jsfiddle.net/cc9he/

+0

我將繼續處理您的評論和@JonnySooter的評論。問題是這些按鈕被放置在一個Datatables生成的表中,這種做法會讓事情變得更加複雜。 –

0

您可以使用類名進行委派來確定要調用哪個函數。

$(function() { 
    $(document).on('click', "a.edit-row", editRow); 
    $(document).on('click', "a.save-row", saveRow); 
}); 

function editRow() { 
    $(this).html("Save").removeClass("edit-row").addClass("save-row"); 
} 


function saveRow() { 
    $(this).html("Edit").removeClass("save-row").addClass("edit-row"); 
} 

http://jsfiddle.net/Z96pp/

+0

沒有給出的答案似乎工作。只要我點擊「保存」,它就會切換到「編輯」並立即切換回來。你們都指向相同的方向,所以我覺得還有其他的東西搞砸了。我會盡快通知您解決方案! –

+0

嗯,奇怪。當然,讓我們知道是否還有其他我們沒有考慮到的事情。 – Gunner4Life