+ -
当前位置:首页 → 问答吧 → 选择器使用请教

选择器使用请教

时间:2009-07-16

来源:互联网

<table>
    <tr>
        <td>第一个</td>
         <td><input type='checkbox' /></td>
    </tr>
    <tr>
        <td>第二个</td>
         <td><input type='checkbox' /></td>
    </tr>
    <tr>
        <td>第三个</td>
         <td><input type='checkbox' /></td>
    </tr>
</table>

以上为html代码,我的目的是当点中任何一行时,行内的input元素被勾选或是不被勾选

我写的jq代码如下
复制代码
  1.     $('tr').click(function(){
  2.         $('tr input').attr('checked','true');
  3.     });
  4.     

$('tr input') 选择器返回了整个页面的所有input元素,并把他们的值设置为了真或是假。

但我要的是,仅选择被点击的那一行内的input元素。

我被卡在这里了,
复制代码
  1. $('tr > input'),
  2. $('tr + input'),
  3. $('tr').next('input')

都不行,不知道应该怎么写了。

另外:我想使用 this 的方式去实现,同样的目的,又应该怎么写呢。

作者: wienne   发布时间: 2009-07-16

<table>
    <tr>
        <td>第一个</td>
         <td><input type='checkbox' value="1"/></td>
    </tr>
    <tr>
        <td>第二个</td>
         <td><input type='checkbox' value="2" /></td>
    </tr>
    <tr>
        <td>第三个</td>
         <td><input type='checkbox' value="3" /></td>
    </tr>
</table>
<script>
$('input').click(function(){

if($(this).attr('checked') == true) alert($(this).attr('value'));
    
});
</script>

作者: shgen   发布时间: 2009-07-16

复制代码
  1. $('tr').click(function () {
  2.     $(this).find(':checkbox').click();
  3. });

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

嗯,2楼的是这个意思,但代码有问题

导致
错误: too much recursion
源文件:file:///D:/xmldkp/jquery/js/jquery-1.3.2.min.js
行:19

作者: wienne   发布时间: 2009-07-16

复制代码
  1.         v= $(this).find(':checkbox');
  2.         v.attr('checked',!v.attr('checked'));

这样也行,虽然没你的简单。

不知道你那简洁的办法错在哪

作者: wienne   发布时间: 2009-07-16

在我的实际代码中又出现问题了
复制代码
  1. v= $(this).find(':checkbox');
  2. v.attr('checked',!v.attr('checked'));

这个不行,只能给勾选上,不能取消勾选。

复制代码
  1. v= $(this).find(':checkbox');
  2. v[0].checked?v[0].checked=false:v[0].checked=true;

直接操作dom没问题

复制代码
  1. if(v.attr('checked')!=undefined)
  2.     v.attr('checked','false');
  3. else
  4.     v.attr('checked','true');

用jq就只能给勾选上,不能取消勾选

不明白啊不明白啊

作者: wienne   发布时间: 2009-07-16

回楼上,true和false是布尔值,而不应该是字符串

我喜欢这种DOM方法,

v[0].checked=!v[0].checked;

JQ方法和DOM方法之间,哪个简单我用哪个

作者: shawphy   发布时间: 2009-07-16

看看这里吧,获取很有帮助的
http://jquery.tree88.com/DS_JQ_LXT/DS_JQ_LXT8.html

作者: zjfeihu   发布时间: 2009-07-16

算了哟,么样简单么样搞哟

复制代码
  1.         v= $(this).find(':checkbox')[0];
  2.         v.checked=!v.checked;

作者: wienne   发布时间: 2009-07-16

引用
引用第3楼wienne于2009-07-16 10:17发表的  :
嗯,2楼的是这个意思,但代码有问题

导致
错误: too much recursion
源文件:file:///D:/xmldkp/jquery/js/jquery-1.3.2.min.js
.......

这个我是在本地上试过的,是可以的。

<script type="text/javascript" src="../js-inc/jquery-1.3.2.min.js"></script>
你不要有太多的input,不然要改下选择器的。

作者: shgen   发布时间: 2009-07-16

引用
引用第3楼wienne于2009-07-16 10:17发表的  :
嗯,2楼的是这个意思,但代码有问题

导致
错误: too much recursion
源文件:file:///D:/xmldkp/jquery/js/jquery-1.3.2.min.js
.......

我忘记测试Firefox了,其实是事件传播引起的,这样就行了:
复制代码
  1. $('tr').click(function () {
  2.     $(this).find(':checkbox').click();
  3. });
  4. $(':checkbox').click(function (ev) {
  5.     ev.stopPropagation();
  6. });

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

还有一种方法
复制代码
  1. $('td').click(function (ev) {
  2.     if (ev.target == this) {
  3.         $(this).parent('tr').find(':checkbox')[0].checked ^= true;
  4.     }
  5. });

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

没怎么懂你的意思啊!

作者: lucky16   发布时间: 2009-07-17