2012-07-24 26 views
2

我有一个复选框旁边的输入文本框。如果复选框被选中,则文本框被清空并被禁用。但是,我想先将该值存储在该文本框中,以便在用户决定取消选中该复选框时将其返回到文本框。这是我的代码:Jquery在事件触发器上传递和存储一个动态变量

function disablePath() { 
    var currentPath; 
    $('#user_strategy').on('change','input[value="all"]', function(){ 
     var that = $(this); 
     if($(this).is(':checked')) { 
      currentPath = that.next().val(); 
      that.next().attr("disabled", "disabled").val(''); 
     } 
     else { 
      that.next().removeAttr("disabled").val(currentPath); 
     } 
    }); 
} 

因此,如果我只有一个复选框后面跟一个文本框,那么工作得很好。如果我有多个复选框 - 文本框组合,我会遇到麻烦。如果我选中多个复选框,则只会存储最后一个文本框内容 - 所以如果我取消选中任何先前选中的框,则相应的文本框将填充最后一个文本框的相关复选框的值,而不管关系如何。有没有一种方法来存储特定于上一个复选框的文本框的值?下面是现场代码:

http://kaboukie.net/stackoverflow/

我相信我需要使用EVENTDATA,但我不确定如何,任何援助将不胜感激!

回答

2

我会建议附加数据到元素本身,可以使用jquery的.data()方法完成。

下面是代码,我已经测试正常工作;)

$(function() { 
    function disablePath() { 
     var currentPath; 
     $('#user_strategy').on('change','input[value="all"]', function(){ 
      var that = $(this); 
      if($(this).is(':checked')) { 
       temp= that.next().val(); 
       that.data("currentPath" , temp); 
       that.next().attr("disabled", "disabled").val(''); 
      } 
      else { 
       that.next().removeAttr("disabled").val(that.data("currentPath")); 
      } 
     }); 
    } 
    disablePath(); 
}); 
0

如何将数据作为属性存储在复选框中?

$(function() { 
    function disablePath() { 
     var currentPath; 
     $('#user_strategy').on('change','input[value="all"]', function(){ 
      var that = $(this); 
      if($(this).is(':checked')) { 
       $(this).attr("x:savedData", that.next().val()); 
       that.next().attr("disabled", "disabled").val(''); 
      } 
      else { 
       that.next().removeAttr("disabled").val($(this).attr("x:savedData")); 
      } 
     }); 
    } 
    disablePath(); 
}); 

http://jsfiddle.net/ruwJT/

也许不是最好的做法,但它的工作原理。

0

的问题是,当你设置currentPath,它不记得哪个元素负责。

为了解决这个问题,您可以为每个复选框分配一个唯一的ID属性,并将该ID与键值对中的文本框的值一起存储为键。

或者,可以使用jQuery的.data()方法在任何元素上存储启用数据。见http://jsfiddle.net/EP5bg/