2012-07-24 68 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/