2012-04-17 8 views
-1

こんにちは、jqueryでスクリプトを作成してクリックイベントにバインドしますが、コードはclickイベントでアクティブ化されません。しかし、私は別のJavaScript関数にスクリプトを置き、そのJavaScript関数をクリックイベントのリスナーにバインドするとき、関数はクリックで実行することができます。クリックイベントによってスクリプトがアクティブ化されない

もう1つは、JavaScriptを使用してスクリプトをバインドすると、私がクリックしたdivの数と同じ数の時間が表示されます。つまり、3番目のdivをクリックすると3回表示されます。 私のページのDOM構造がpdf.jsプロジェクトであり、このDOMは 動的に作成された私は、次の をクリックしたどのユーザーにpagecontainer2の孫のインデックスを取得したいが、私のスクリプトです:

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

ドムCODE:

<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

あなたのDOM(HTMLコード)として与えてください。そして質問をする! – Bergi

+1

あなたの質問が何であるかをもっと明確にする必要があります。あなたは何が起こっているのかを説明するのにうまくやっていましたが、代わりに何をしたいのかを説明します。 :) – jmort253

+0

私の質問を更新しました。 – hiteshtr

答えて

4

...わずかな変更で、このいずれかを試してみてくださいまだ存在するが後で作成される場合は、onを使用してイベントハンドラを既存のノードにバインドし、子ノードを指定する必要があります。

<div id="pageContainer2">は既に存在していますが、そのコンテナ内にそのdivを作成しているとします。だから、適切なsytnaxは次のようになります。

$(function() { 
    $('#pageContainer2').on('click', '.textlayer > div', function() { 
     /* .... */ 
    }); 
}); 

そのように、あなたが実際にDOM、そのコンテナ内のすべての要素をクリックすることによってトリガーされたイベントコンテナにイベントハンドラをバインドが、ほとんどのイベントバブル以来のアップしていますコンテナ自体に到達します。別のセレクタ( `.textlayer> div ')を指定したため、jQueryはクリックされた実際の要素がこのセレクタを満たしているかどうかを確認します。

さえ#pageContainer2は、イベントハンドラをバインドした後に作成された場合、あなたはまだ文書自体にイベントハンドラをバインドすることができます。

$(document).on('click', '#pageContainer2 .textlayer > div', function() { ... 
+0

@はできるだけjavascriptで同じ作業を行う方法ではありませんplsを提供します – hiteshtr

+0

sir thanx私は少しコードを変更し、その作業は今完璧です – hiteshtr

0

HTMLは動的に作成されるため、イベントをバインドするにはon APIを使用する必要があります。

$(function() { 
    $(".textLayer > div", '#pageContainer2').on('click', function() { 
     var index = $(this).index(); 
     alert("index of div is = " + index); 
    }); 
}); 
+0

しかし、私はインデックスを取得したい場合は、pageContainer2に属するtextLayerのdiv – hiteshtr

+0

あなたの質問には言及していない参照してください。できるだけ具体的に質問してください。そうすれば、人々はより迅速にあなたを助けることができます。 – rgin

+0

ごめんなさい、次回に気をつけます – hiteshtr

1

このジャバスクリプトを試してみてください。

$(function() { 
     $(".textLayer").click(function() { 
      var index = $(".textLayer").index(this); 
      alert("index of div is = " + (index+1)); 
     }); 
    }); 
1

あなたがいないDOMノードにクリックイベントハンドラを割り当てる必要がある場合

$("#pageContainer2 > .textLayer > div").click(function() { 
      var index = $(this).index(); 
      alert("index of div is = " + index); 
     }); 
関連する問題