2012-04-16 67 views
0

我已经写了一些jQuery代码来选择另一个div的div的孙子,其ID为pageContainer2,用户单击它并显示带有索引值的警报消息。但代码是节点工作,所以请看看我是否写错了代码或是他们的任何其他问题。选择孙子onclick事件

以下是我的html页面的代码与jQuery脚本:

<script> 
$("div#pageContainer2 div.textLayer div").click(function() { 
    // this is the dom element clicked 
    var index = $("div").index(this); 
    alert("index of div is = " + index); 
}); 
</script> 

<div id="pageContainer2" > 
<canvas id="page2" width="741" height="959"></canvas> 
<div class="textLayer"> 
<div>......some text here....</div> 
<div>......some text here....</div> 
<div>......some text here....</div> 
</div> 
</div> 

<div id="pageContainer3" > 
<canvas id="page3" width="741" height="959"></canvas> 
<div class="textLayer"> 
<div>......some text here....</div> 
<div>......some text here....</div> 
<div>......some text here....</div> 
</div> 
</div> 

回答

1
<script type="text/javascript"> 
    $(function() { 
     $(".textLayer > div", "#pageContainer2").click(function() { 
      var index = $(this).index(); 
      alert("index of div is = " + index); 
     }); 
    }); 
</script> 

<div id="pageContainer2" > 
    <canvas id="page2" width="741" height="959"></canvas> 
    <div class="textLayer"> 
     <div>......some text here....</div> 
     <div>......some text here....</div> 
     <div>......some text here....</div> 
    </div> 
</div> 

<div id="pageContainer3" > 
    <canvas id="page3" width="741" height="959"></canvas> 
    <div class="textLayer"> 
     <div>......some text here....</div> 
     <div>......some text here....</div> 
     <div>......some text here....</div> 
    </div> 
</div>​ 

FIDDLE

+0

我看到了所有三个答案的小提琴,并且您的代码正在返回完美的索引值,但是在我的页面上脚本没有通过点击事件激活,不知道为什么。有可能是由于存在另一个点击绑定函数,这个脚本没有运行?请回复我ASAP – hiteshtr 2012-04-17 05:15:44

+0

虽然代码工作时,我把它放在一些Java脚本函数,并绑定该功能,单击事件列表 – hiteshtr 2012-04-17 06:08:38

1

好,click事件完全不绑定,因为textLayerclass没有id,但你通过id选择。

更改选择是:

$("div#pageContainer2 div.textLayer div") 

这也不清楚你wan't该指数显示,因为你当前使用将在整个文档中返回特定div标签的指数。如果你想在家长的索引,你最好使用类似的东西:

var el = $(this); 

var index = $('div', el.parent()).index(this); 
// Or 
var index = el.prevAll().length; 
+0

它仍然没有工作,你说 – hiteshtr 2012-04-16 12:00:05

+0

@hiteshtr,确实如此,现场观看http://jsfiddle.net/b5BLr/(和[这里](我改变HTTP ://jsfiddle.net/b5BLr/1/)在父代 – 2012-04-16 12:04:36

+0

以上的替代'索引'变种以上的html代码属于pdf.js,它是动态生成的,所以是代码不工作的原因 – hiteshtr 2012-04-16 12:08:21

2

有几个问题。

  1. 您似乎没有被使用$(document).ready()事件,因此事件被绑定到任何元素,因为它们在DOM是没有。
  2. 你试图找到一个id="textLayer"div,不存在(你有class="textLayer"
  3. 你传递一个选择的index()方法,这个选择应该定义其中你想要的元素找到这个特定对象的位置。只有不断一个this元素(甚至jQuery的each()一个单元工作的时间,从第一个到最后...),所以删除特定选择。

所以,纠正代码:

$(document).ready(
    function(){ 
    $("div#pageContainer2 div.textLayer div").click(function() { 
     // this is the dom element clicked 
     var index = $("div").index(); 
     alert("index of div is = " + index); 
    }); 
}); 

JS Fiddle demo

参考文献:

+0

不工作的代码也是 – hiteshtr 2012-04-16 12:02:32

+0

是的,它的确如此。试试[JS小提琴演示](http://jsfiddle.net/davidThomas/dYz35/)。如果它不适用于您的网站,请查看浏览器错误控制台并查看发生了什么,或者是否报告了任何错误。 – 2012-04-16 12:05:42

+0

+1''domReady';) – 2012-04-16 12:08:29

1

将您的代码$(document).ready和hiteshtr这是工作,只要你想只检查这一项改变#textLayer.textLayer

$(document).ready(function() { 
    $("#pageContainer2 > .textLayer > div").click(function() { 
     // this is the dom element clicked 
     var index = $("#pageContainer2 > .textLayer > div").index(this); 
     alert("index of div is = " + index); 
    }); 
}); 
+0

我看到你在这里做了什么... – 2012-04-16 12:09:03

+0

Juicy它是我自己的代码.... – 2012-04-16 12:10:53

+0

哪几个神奇地出现在你之前的几分钟? (在这种情况下,情侣约为8分钟) – 2012-04-16 12:12:35