2016-02-28 19 views
0

我使用CMS月和框架,我可以使用下面的HTML元素,從AJAX請求:如何更新阿賈克斯數據屬性完成

<a href="#" class="sbutton" data-request="onSavedeal" 
    data-request-data="deal_ID:'14779255',type:'local',active:'0'"> 
    <i class="material-icons pink-text listfavorite">favorite</i>      
</a> 

每當點擊收藏夾按鈕觸發此鏈接關閉控制器「onSavedeal」的更新。第一次點擊時更新數據庫工作正常。但是,更新後,「數據請求數據」屬性的值不會更新,因此該按鈕不適用於後續點擊。

我需要改變鏈接,使「active:'0'」變爲「active:'1'」。將得到的完整的元素將是

<a href="#" class="sbutton" data-request="onSavedeal" 
    data-request-data="deal_ID:'14779255',type:'local',active:'1'"> 
    <i class="material-icons pink-text listfavorite">favorite</i>      
</a> 

在框架我可以添加所謂的「數據請求成功」的另一個屬性,其執行JavaScript函數(或代碼)向上AJAX調用的成功完成。我怎樣才能讓一個名爲「)updateactive(」功能,這將觸發0和1之間的積極價值的最後一個元素應該是這樣的:

<a href="#" class="sbutton" data-request="onSavedeal" 
    data-request-data="deal_ID:'14779255',type:'local',active:'0'" 
    data-reuqest-success="updateactive();"> 
    <i class="material-icons pink-text listfavorite">favorite</i>      
</a> 

回答

1

如果你可以安全地通過屬性data-request其值標識此a元素

function updateactive() { 
    var newAttrValue = "deal_ID:'14779255',type:'local',active:'1'"; 
    $('[data-request="onSavedeal"]').attr('data-request-data', newAttrValue); 
} 

不要忘了糾正data-reuqest-successdata-request-successonSavedeal,你會寫出如下updateactive功能。

UPDATE 如果頁面上有很多a元素,可以重複使用下面的相同函數。檢查演示 - Fiddle

function updateactive() { 
    var clickedA = event.currentTarget, 
     newAttrValue = $(clickedA).attr('data-request-data').replace("active:'0'", "active:'1'"); 

    $(clickedA).attr('data-request-data', newAttrValue); 
} 
+0

這個用例中的問題有數百個交易,所以爲每個交易創建一個單獨的javascript函數是不可行的。此外,這將使newAttrValue保持靜態,因爲在Ajax調用之後頁面沒有被重新加載。 – user2694306

+0

你能解決這個問題嗎?通過獲取'a'的'data-request-data'屬性的當前值並簡單地用'active'替換''0'':'1''? –

+0

將會定義「事件」嗎? –

0

作任何改動你的錨標記這樣

<a href="#" class="sbutton" data-request="onSavedeal" 
data-request-data="deal_ID:'14779255',type:'local',active:'0'" 
data-reuqest-success="updateactive(this);"> 
<i class="material-icons pink-text listfavorite">favorite</i>      

注意的變化updateactive(this);

然後在你的jQuery,你可以有函數定義這種方式。

function updateactive(element) {   
    $(element).attr('data-request-data', $(element).attr('data-request-data').replace("active:'0'", "active:'1'")); 
}