+ -
当前位置:首页 → 问答吧 → 一段jquery代码, 不知错在那里, 百思不得其解  ?  请求高手支援!

一段jquery代码, 不知错在那里, 百思不得其解  ?  请求高手支援!

时间:2009-07-03

来源:互联网

开始的时候是对, 但后不知改那, 变得不能运行,  主要是if()那有问题,
复制代码
  1. //jquery 如下 当点某个click时触发  意图是点radio后的label,就选项中radio
  2.                 var ali = ['a', 'e', 'g'];
  3.         $(':radio').next().each(function(i){
  4.                                                 
  5.                for(var j=0; j<3; j++){                                      //alert( $(this).text() );
  6.               if( $(this).text() == ali[j] ){                                 //这里有问题, 老是判断不正确的 
  7.                       $(this).prev().attr('checked',true);               //alert( ali[j] );    
  8.               }else{
  9.                    alert( 'this is wrong' );
  10.               }
  11.               }
  12.         });
  13. //html 如下
  14. <INPUT TYPE="radio" NAME="arr1[]" value="a"> <label>a</label>
  15. <INPUT TYPE="radio" NAME="arr1[]" value="b"> <label>b</label>
  16. <INPUT TYPE="radio" NAME="arr1[]" value="c"> <label>c</label>
  17. <INPUT TYPE="radio" NAME="arr2[]" value="d"> <label>d</label>
  18. <INPUT TYPE="radio" NAME="arr2[]" value="e"> <label>e</label>
  19. <INPUT TYPE="radio" NAME="arr2[]" value="f"> <label>f</label>
  20. <INPUT TYPE="radio" NAME="arr3[]" value="g"> <label>g</label>
  21. <INPUT TYPE="radio" NAME="arr3[]" value="h"> <label>h</label>
  22. <INPUT TYPE="radio" NAME="arr3[]" value="i"> <label>i</label>
[ 此帖被coolesting在2009-07-03 20:21重新编辑 ]

作者: coolesting   发布时间: 2009-07-03

      不知语法错在那里?

作者: coolesting   发布时间: 2009-07-03

首先想说的是没必要用$(':radio').next(),直接$('label')就行了

其次,each是对所有的9个元素都调用function,而每个function又进行了一个长度3的循环,所以一共执行了27次if判断。

复制代码
  1.         var ali = ['a', 'e', 'g'];
  2.         var newAli = {};
  3.         for (i in ali) {
  4.             newAli[ali[i]] = 1; //这里只是让newAli有这个属性而已,只要不赋值为undefined就行了
  5.         }
  6.         $('label').each(function(){
  7.                   if( $(this).text() in newAli ){
  8.                           $(this).prev().attr('checked',true);
  9.               }
  10.         })
  11.         .click(function(){$(this).prev().attr('checked',true);});
[ 此帖被keakon在2009-07-03 20:08重新编辑 ]

作者: keakon   发布时间: 2009-07-03

首先, 其实代码没错, 只是不效率,后来发现是其它地方写错了

    三楼的的其次那里非常精彩, 原来对象还可以这么用,  

          但给一个对象赋值为1不明白, 为什么要让它有个属性? 可以这样直接赋值1吗?  




                                                          

作者: coolesting   发布时间: 2009-07-03

for .. in ..

这个in就是遍历属性,所以要让这个属性存在,才能让in操作返回true

JavaScript的对象是可以直接对属性赋值的,一旦赋值,这个属性就存在了

我这里是赋值为1,你也可以赋值为别的

更正一下,删除属性是用delete,赋值为undefined也不能删除

作者: keakon   发布时间: 2009-07-03

用FIREBUG调试一下就知道啦

作者: deeka   发布时间: 2009-07-05

    $("label").click(function(){$(this).prev().attr("checked",true)})

作者: campaign   发布时间: 2009-07-07

相关阅读 更多