2011-06-14 53 views
3

我有一個鏈接:的onClick功能時,停止HREF鏈接稱爲

<h2><a href=?p=article&aid='.$article->id.'" onclick="loadPage('article'); return false;">.$article->title.</a></h2> 

,並調用此函數:

function loadPage(page){ 
    $("#content").html("Loading..."); 

    $.post("page.php", {p: page}, function(data){ 
     $("#content").html(data); 
    }); 
} 

但我的javascript一直追着href是仍然有效。 我用過return false;在我的onClick的之前,以防止這個,但它不工作這個時間?

+0

請檢查並更新您的第一個代碼段(只需複製粘貼的內容即可),因爲沒有辦法做到這一點 – mkilmanas 2011-06-14 20:48:57

+0

您在athesyn.php裏面做了什麼樣的處理 – Dejan 2011-06-14 20:52:00

回答

1

它看起來像你的腳本有錯誤,並沒有到達返回塊。如果添加try catch,它將忽略腳本中的錯誤。

function loadPage(page){ 
try{ 
    $("#content").html("Loading..."); 

    $.post("page.php", {p: page}, function(data){ 
     $("#content").html(data); 
    }); 
} catch(err){} 
} 
1

使用jQuery將click事件綁定到函數可能會更好,因爲邏輯更好地分離。

$('h2 a').click(function(event) { 
    $("#content").html("Loading..."); 

    $.post("page.php", {p: page}, function(data){ 
     $("#content").html(data); 
    }); 

    return false; 
}); 

通常,如果href仍處於活動狀態是它可能有一個JavaScript錯誤。

編輯:您還可以使用event.preventDefault()停止href遵循以這種方式綁定的點擊功能。

最後,href看起來確實很好(缺少開場白)。這是一個錯字嗎?

+2

我同意,而不是'return false;'e.preventDefault();(其中'e'是傳遞給click處理程序的事件參數)會更合適([event.preventDefault()](http:// api .jquery.com/event.preventDefault /)) – mkilmanas 2011-06-14 20:51:42

1

我最喜歡的做法是取代href屬性。這具有保持與非JS客戶端的兼容性的優點,並且不必處理「停止」事件或任何這樣的巫術。例如:

function unobtrusiveLinkSetup(link) { 
    // replace the about link's href 
    J(link).attr('jshref', J(link).attr('href')); 
    J(link).removeAttr('href'); 

    // handle the link's action 
    J(link).click(function(index) { 
      J(this).stop(); 
      // make a request in the background 
      J.get(J(this).attr('jshref'), function(result) { 
       // whatever you need to do with the link.. 
      }); 
    }); 
} 

然後,你可以做unobtrusiveLinkSetup("#myLink");在文檔的準備功能,或任何其他地方。

+0

這正是我所需要的。我從我的鏈接中刪除了onclick事件,但是將href事件留給了fire。謝謝! – 2013-02-19 18:24:46