2012-01-04 49 views
1

我想根據用戶在表單上的選擇更改按鈕(提交)上的data-confirm屬性的值。我把一個下拉列表的變化功能如下:覆蓋數據 - 確認值

... 
    if($("#"+select_name).val() == "abc") 
    { 
     $(".variable_button").attr("data-confirm","abc is good choice!"); 

    } else 
    { 
     $(".variable_button").attr("data-confirm","abc would have been great but this is fine too..."); 
    } 
... 

我面臨的問題是,一旦它被賦予一個非空字符串,顯然數據確認,不能更改。我已將它設置爲「」在服務器代碼中。並且,當用戶首先在下拉列表上進行選擇時,它會變爲上面顯示的兩條消息之一。但是如果用戶再次更改選擇,則數據確認消息不會改變。這是每個設計還是我錯過了什麼?

+0

'data-confirm'屬性只是您用來存儲消息的自定義'data-'屬性,對嗎? – 2012-01-04 21:09:41

+0

喬希 - 是的,這是正確的。 – Tabrez 2012-01-04 21:24:04

回答

3

不要使用.attr(),使用.data()

var newData = ($("#"+select_name).val() == "abc") 
    ? "abc is good choice!" 
    : "abc would have been great but this is fine too..."; 

$(".variable_button").data("confirm", newData); 
+0

這比使用'.attr()'更清潔,但兩者都應該工作。 – 2012-01-04 21:25:04

+0

謝謝馬特!喬什 - 我不知道爲什麼.attr()不起作用。但我試過這兩種方式,.data()方法沒有任何問題。使用.attr()方法,我只能將空字符串的值更改爲(一次),並且沒有進一步的更改。 – Tabrez 2012-01-05 07:41:40

0

jQuery不會讓你更新data-屬性與.attr()方法,所以別的東西打破。

這裏的工作示例(JSFiddle):

var counter = 1; 

$('#click').click(function() { 
    button = $('#click'); 
    console.log(button.attr('data-confirm')); 
    button.attr('data-confirm', 'this is test ' + counter); 
    console.log(button.attr('data-confirm')); 
    counter++; 
}); 

你可以嘗試回購問題在的jsfiddle?

在重讀您的問題時,聽起來好像事件處理程序在用戶第二次更改選擇時不會觸發。看看你是否可以在你的事件處理程序中設置一個斷點,以查看它是否被擊中。