1

我正在尝试根据复选框的状态从复选框中选择一个动态变量以禁用或启用。HTML 代码:

<input type="checkbox" name="only_once_1" id="only_once_1" class="onlyonce" >
<input type="text" id="temp_1" name="temp_1">

JAVASCRIPT

$(".onlyonce").change(function($){
   var parts = this.name.match(/(\D+)(\d+)$/); 
   if(this.value == "on"){
      $("#"+"temp_"+parts[2]).disable()
   }else{
      $("#"+"temp_"+parts[2]).enable()
   }
});

这个想法是我可能有许多动态添加的这些盒子的副本。任何想法如何让它发挥作用?

谢谢!

4

2 回答 2

3

你有 3 个错误。这是工作代码:

$(".onlyonce").change(function() {  // <-- error #1: remove $ parameter
    var parts = this.name.match(/(\D+)(\d+)$/);
    if (this.checked) { // <-- error #2: use checked property
        $("#" + "temp_" + parts[2]).prop('disabled', true)  // <-- error #3: use prop method
    } else {
        $("#" + "temp_" + parts[2]).prop('disabled', false)
    }
});

http://jsfiddle.net/XR9me/

主要问题在这里:$(".onlyonce").change(function($) {. 通过$作为参数传递给change方法,您覆盖对 jQuery 的引用(在闭包内$成为事件对象)。

你也可以写得更干净一点:

$(".onlyonce").change(function() {
    var parts = this.name.match(/(\D+)(\d+)$/);
    $("#temp_" + parts[2]).prop('disabled', this.checked);
});

http://jsfiddle.net/XR9me/1/

于 2013-03-09T21:39:30.707 回答
1

如果您可以控制 HTML 结构,则可以:

$('.onlyonce').change(function(){
    $(this).next('input[type=text]').prop('disabled', this.checked);
});

http://jsfiddle.net/vol7ron/XR9me/2/

于 2013-03-09T22:10:38.037 回答