2011-05-19 1 views
2

を逃すjqueryのは、第二の「someFunction」で、ここで...リンクはAJAX呼び出しを持つことになり、それが成功を返された後、別の関数を呼び出しますクリックし、まず最初に

//First Call 
$(this).click(ajaxHandler); 

function ajaxHandler(){ 
    var $obj = $(this); 
    var urlLink = someURL; 
    var data = "id=" + "123"; 

    // Unbind the ajax handler to prevent re-fire before ajax request completes 
    $obj.unbind("click", ajaxHandler); 

    $.ajax({ 
     url: urlLink, 
     data: data, 
     cache: false, 
     success: function(resp){ 
      // Bind the new event handler 
      $obj.bind("click", someFunction); 

      // Fire click on Object 
      $obj.click(); 
     }, 
     error: function(){ 
      // Put the ajax handler back so the user can try again if it fails 
      $obj.bind("click", ajaxHandler); 
     } 
    }); 
} 

を火のイベントをクリックして、私のような、私はevt.pageXevt.pageYを取得しています

someFunction: function(e){ 
    var evt = (e) ? e : window.event; 
    var p = evt.target.name; 
    var x = evt.pageX; 
    var y = evt.pageY; 
    ............ 
} 

まず時間が定義されていない呼び出しています。リンクをもう一度クリックしてから、正確な位置を指定します。

私はevt.target.nameのデータも初めて取得しています。 これらのイベントはツールチップに役立ちます。

は、どのように初めての軸位置を特定するために私を助けてください。事前に おかげで...

+0

より良い作品を発見しました。 – pixelbobby

+0

私のコードに何らかの瑕疵があります。なぜ、私は最初の時間ではなく、2回目でないのですか? – Max

+0

someFunctionがイベントハンドラとしてバインドされている最初のクリックでpageXの定義が解除されています(リンクへの2回目のクリック)。 – wewals

答えて

1

イッツのような遅延を行いますClickイベントはマウスでクリックするのではなく、手動で起動されるため、最初は未定義です。この問題を回避するには、イベントをトリガーする代わりにsomeFunctionを手動で呼び出すことができ、最初の呼び出しのイベント変数を渡すことができます。 someFunction

//First Call 
$(this).click(ajaxHandler); 

function ajaxHandler(e){ 
    var $obj = $(this); 
    var urlLink = someURL; 
    var data = "id=" + "123"; 

    // Unbind the ajax handler to prevent re-fire before ajax request completes 
    $obj.unbind("click", ajaxHandler); 

    $.ajax({ 
     url: urlLink, 
     data: data, 
     cache: false, 
     success: function(resp){ 
      // Bind the new event handler 
      $obj.bind("click", someFunction); 

      // call function in the context of $obj and pass through event variable 
      someFunction.apply($obj[0],[e]); 
     }, 
     error: function(){ 
      // Put the ajax handler back so the user can try again if it fails 
      $obj.bind("click", ajaxHandler); 
     } 
    }); 
} 

あなたはイベント変数と空想何もする必要はありません、jQueryのは、あなたのためにそれを正常化:

someFunction: function(evt){ 
    var p = evt.target.name; 
    var x = evt.pageX; 
    var y = evt.pageY; 
    ............ 
} 
+0

応答のおかげで、これは初めて "someFunction"を発射していません。 – Max

+0

'.apply()'呼び出しでタイプミスを修正しました。変数だけでなく、配列を渡す必要があります。今すぐやってみて下さい。 – DarthJDG

+0

これはすばらしいです、ありがとうバディ..作品の魅力 – Max

1

私は通常だけのMouseMove上のすべての回で、それを追跡し、それは常に私

var xPos; 
var yPos; 

$(document).ready(function() { 

$(document).mousemove(function (e) { 

    xPos = e.clientX; 
    yPos = e.clientY; 
}); 

}); 

のために働くか、多分そう setTimeout(function() {$obj.click(); }, 500);

+0

バインドする前に、より多くの呼び出しを追加する必要がありますかねえレスポンスのおかげで、これはイベントの位置を取得するために、一般的な解決策であるが、私は取得する必要がありますsomeFunction内のアンカータグの位置、私はajaxHandlerから軸の位置を渡していません。 – Max

+0

おそらく、$ obj.click();という行にわずかな遅延があります。 – Mertis

+0

応答時間ではなく、とにかく試してみました。 – Max

0

( "クリック"、機能$ obj.liveを使用してみてください( )...)

私はそれが最初の時間を発射するとき、あなたが欠場した場合、ちょうど撮影を続けるバインド

関連する問題