2012-01-04 84 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?

在重读您的问题时,听起来好像事件处理程序在用户第二次更改选择时不会触发。看看你是否可以在你的事件处理程序中设置一个断点,以查看它是否被击中。