2012-04-16 104 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