2016-03-24 26 views
0

下面是我的原代码...为什么我的代码在重构功能代码后不工作?

innerTC.find('input[name=tc0]').click(function(){ 
      console.log($(this).siblings('input[name=tc0]')); 
      $(this).siblings('input[name=tc0]').prop('checked', false); 
    }); 
    innerTC.find('input[name=tc1]').click(function(){ 
      console.log($(this).siblings('input[name=tc1]')); 
      $(this).siblings('input[name=tc1]').prop('checked', false); 
    }); 
    innerTC.find('input[name=tc2]').click(function(){ 
      console.log($(this).siblings('input[name=tc2]')); 
      $(this).siblings('input[name=tc2]').prop('checked', false); 
    }); 

不过,我尝试将它重构像下面的函数代码...

var innerTC = $('#pltc').contents(); 
    for(var i=0; i<3; i++) { 
     innerTC.find('input[name=tc' + i + ']').click(function(){ 
      $(this).siblings('input[name=tc' + i + ']').prop('checked', false); 
    }); 
    } 

但不工作。

+0

@epascarello我不认为这是一个重复 - 循环索引变量被冻结成字符串。 – Pointy

+0

我认为问题是'var innerTC = $('#pltc')。contents();' – Pointy

+1

这应该是相当直接的解决方法,但是它看起来像是同名的文本框和复选框输入元素。您能否编辑您的问题以包含HTML示例。 –

回答

3

试试这个:

innerTC.find('input[name^=tc]').click(function(){ 
      var attr = $(this).attr('name'); 
      $(this).siblings('input[name='+attr+']').prop('checked', false); 
    }); 

https://jsfiddle.net/y7yre4nt/

+0

这样可以解决这个问题,但逻辑上它没有任何意义。你正在选择当前元素作为它自己的“兄弟()”... –

+0

@RoryMcCrossan'你选择当前元素作为它自己的兄弟()“这是怎么回事? –

+0

'this' =引发点击的元素。 'attr' =当前元素的名称。 '$(this).siblings('input [name ='+ attr +']')'=获取当前元素的同名元素与当前元素的名称,这是没有意义的。 –

相关问题