2011-11-20 29 views
0

我正在嘗試使用mootools ajax請求記錄對傳出鏈接的點擊。到目前爲止,這是我正在做的。mootools內聯Ajax調用不工作

每一個環節看起來像如下:

<div id="1">  
<a href="http://stackoverflow.com/" onclick="clickRecord(1)">StackOverflow</a> 
</div> 

JavaScript函數clickRecord(ID)的定義如下:

function clickRecord(id){ 
    var u = "record.php"; 
    var req = new Request({ 
     method: 'post', 
     url: u, 
     data:{'id':id}, 
     onComplete:function(response){ 
     } 
    }).send(); 

} 

我的問題是這樣的。如果我添加一個返回false;到onclick =「」聲明,一切正常,當然問題是點擊不會將用戶帶到預期的頁面。如果我沒有返回錯誤;那麼它似乎就像從未執行ajax調用一樣。

我認爲onclick事件應該先執行,然後只執行默認操作。這不是這種情況嗎?

如果您使用onmousedown事件,則會出現更奇怪的情況。看起來像在Firefox上,如果你使用onmousedown事件,一旦你進入新頁面,你不能簡單地回到舊頁面,你必須刷新舊頁面。否則該呼叫未被執行。這在IE上不會發生。

回答

2

不要使用onclick - 1995年非常

事件而是附加到元素,並使用event.stop(),即:

<a href="http://stackoverflow.com/" data-id="1">StackOverflow</a> 

JS:

document.getElements('a').addEvents({ 
    click: function(event) { 
     event.stop(); 
     var u = 'record.php'; 
     var req = new Request({ 
      method: 'post', 
      url: u, 
      data: { 
       'id': this.get('data-id'); 
      }, 
      onComplete: function(response) {} 
     }).send(); 
    } 
}); 

順便說一句。 <div id="1">這在HTML中無效,ID需要以字母開頭。

+0

嗨奧斯卡,謝謝你的更新。不過,我非常渴望通過onclick事件來實現它。主要原因是我不能完全控制需要跟蹤哪個鏈接。這不是所有的鏈接,而是一組指定爲橫幅的特定鏈接。當然這可以通過命名所有的s來解決。爲什麼我需要它是onclick的另一個原因是因爲大多數客戶已經看到了Google Analytics事件跟蹤並已使用它。他們現在想要一個類似的方法集成到他們的網站。請參閱下面的可能答案。 –

0

好的。發現其中一個問題的答案:

  1. 當通過onclick()聲明時,內聯mootools請求未執行。 看來這是由於腳本不同步造成的。所以可能它沒有實際完全提交請求就返回,然後瀏覽器移動到另一個頁面中斷執行。添加到腳本同步調用解決了這個問題:
function clickRecord(id){ 
    var u = "record.php"; 
    var req = new Request({ 
     async:false, 
     method: 'post', 
     url: u, 
     data:{'id':id}, 
     onComplete:function(response){ 
     } 
    }).send(); 
} 

這是在onmousedownevent提到的第二個問題,即火狐不執行Ajax調用如果瀏覽器導航回仍然沒有解決。不過,我要離開這一點,因爲這不是提出的主要問題。