2011-10-25 8 views
1

したがって、ユーザーが入力要素をクリックするたびに要素の位置を変更しようとしています。Jqueryを使用したForeachステートメント

<script> 

$(document).ready(function(){     
    $('input').each(function(index) { 
      var p = $(this).attr('id'); 
      var position = p.position(); 

      $this.focus(function(){  

      $('#desired_equity_help').css("left", position.left - 435); 
       $('#desired_equity_help').css("top", position.top -20); 
      $('#desired_equity_help').toggle();        
      }); 

    }); 
}); 

</script> 

「desired_equity_helpは、」私は要素がクリックされた入力に基づいて切り替えて再配置しようとしています要素です。なぜこれが動作していないすべてのアイデア?ここで

はHTMLです:

<div id="desired_equity_help" class="form_tooltip" > 
         <div class="tooltip_inner" >    
          <strong>Desired Equity</strong> 
          <p>Hello World! This is some dummy text.</p> 
         </div> 
        </div> 

        <span class="apply_form_label">Desired:</span><input style="width:110px" type="text" id="desired_equity" name="desired_equity"/><br/> 
        <span class="apply_form_label">Break:</span><input style="width:110px" type="text" /> at: <input type="text" style="width:110px" /><select><option>Independent Users</option></select><br/> 

        <span class="apply_form_label">Last One:</span><textarea rows="3" cols="50"></textarea> 
       </div> 
+2

あなたの最大の問題は、クリックイベントハンドラを持たないため、入力をクリックしても何も起こらないということです。 – Chris

+0

これらは入力要素なので、私は.focus()を使用しています。 – Thomas

+0

'.each()'は起動しません。 – Jack

答えて

5

はforeachのを忘れて、そのようセレクタにまっすぐにイベントを適用する...

$('input').focus(function(){ 
    var p = $(this); 
    var position = p.position(); 
    $('#desired_equity_help').css("left", position.left - 435); 
    $('#desired_equity_help').css("top", position.top -20); 
    $('#desired_equity_help').show();        
}); 

$('input').blur(function(){ 
    $('#desired_equity_help').hide();//hide on exit of input 
}); 

注:使用して位置が所属するあなたのdesired_equity_help要素が必要になりますあなたの入力要素と同じ親に。そうでない場合は、代わりにoffsetを使用することを検討してください。

+0

これは正しい考えですが、実装が正しいかどうかはわかりません。後で時間があり、正しい場合はこのコメントを削除し、+1したら後で戻ってきます。 –

+0

これは私が探している解決策の一種だと思いますが、正しく動作していないようです。私は上記のHTMLを追加しました、おそらく私のセットアップに問題があります。 – Thomas

+0

@トーマス:あなたが得ている効果は何ですか? – musefan

3

これはおそらくあなたが探しているものに近いでしょう。定義されていない変数があり、その要素はおそらくtoggleの代わりにshow nである必要があります。

$('input').each(function(index) { 
    var $this = $(this); 
    var position = $this.position(); 

    $this.focus(function() { 
     $('#desired_equity_help').css({"left": position.left + 150, 
             "top": position.top}).show(); 
    }); 
}); 

デモ:http://jsfiddle.net/nEMye/

0

Ohhhhh、それはあなたがそれぞれを(必要はありません。何をしたいのかに応じて、あなたがそこに多くのものをやってように見える)またはトグル()そこにはメソッドがあります。ここで私はどうなるのかです:

$(document).ready(function(){ 
    $('input').click(function(e){ 
     var position = $(this).position(); 
     $('#desired_equity_help') 
     .css({"left" : position.left - 435 , 
      "top" : position.top -20 });  
    }); 
}); 

あなたは、その関数に入力がクリックされるたびに実行するように指示されている入力にクリックイベントを結合することによって。クリックメソッドが不要な場合は、フォーカスメソッドまたはそれに関連する方法に変更できます。トグル方法は必要ありません。スイッチボタン、一度クリックすると1つの状態になり、もう一度クリックすると以前の状態に戻ります。

希望すると便利です。

関連する問題