2012-02-26 81 views
0

在我的文檔的頂部部分,我有這樣的jQuery代碼:Jquery的變量未設置

// RATING 
$('.rateit').click(function(){ 
var position = $(this).position(); 
}); 

在頁腳我有一個Ajax調用:

jQuery.ajax({ 
      url: frm.attr('action'), //your server side script 
      data: frm.serialize(), //our data 
      type: 'POST', 
      success: function (data) { 
      alert(position.left); 
      }, 

的問題是,該警告框沒有表現出這個位置。我已與alert('something');測試,它工作正常。

我真正的Ajax調用:

jQuery.ajax({ 
    url: frm.attr('action'), //your server side script 
    data: frm.serialize(), //our data 
    type: 'POST', 
    success: function (data) { 
    $('.warning').fadeIn(500).css({display: 'block', 
     position: 'absolute', 
     left: position.left + 50, 
     top: position.top - 25 
    }).append('asdasdsadsad'), 
    $(ri).next('.ratingcount').html('asdasdasd') 
    }, 
    error: function (jxhr, msg, err) { 
     alert(msg); //something went wrong. 
    } 
}); 

回答

1

你聲明position在用作點擊事件處理程序的匿名函數中。這意味着它不會在範圍內,當你試圖提醒它(你會得到一個ReferenceError)。

您將需要申報position事件處理函數之外:

var position; 
$('.rateit').click(function(){ 
    position = $(this).position(); 
}); 

但是,你仍然會得到一個錯誤,如果單擊事件處理程序尚未您alert運行時執行,因爲position會爲undefined,因此將不具有left屬性。

+0

仍然沒有在ajax調用中設置該位置。 – 2012-02-26 13:09:25

+0

我用我真正的ajax調用更新了我的問題。位置不是爲div警告設置的。 – 2012-02-26 13:11:35

+0

@Railsbeginner這是因爲你的'position'變量是爲響應用戶事件(點擊一個元素)而設置的,並且只要加載代碼就簡單地觸發你的AJAX調用。 – 2012-02-26 13:16:25

3

在點擊功能,位置是一個局部變量,所以將只在此範圍內可見。

試試這個:

var position; 

$('.rateit').click(function(){ 
    position = $(this).position(); 
}); 
+0

我已經用我的全部ajax調用更新了我的問題。該位置不是爲警告div設置的。 – 2012-02-26 13:16:00

+0

當這個Ajax被調用?您需要在Ajax調用之前設置位置,而不是點擊。 – 2012-02-26 13:22:16

+0

或點擊'.rateit'元素調用ajax函數。 – 2012-02-26 13:25:09

0

我是因爲你的變量是在$定義點擊();( 'rateit。')。嘗試:

var position; 

$('.rateit').click(function(){ 
position = $(this).position(); 
});