2009-10-17 123 views
0

如果用戶需要登錄時向用戶發送提醒消息,但同時避免發出ajax呼叫,最佳方式是什麼?我可能有像<a href="#" id="vote">這樣的代碼,它會根據點擊觸發一個ajax函數。我想我會檢查服務器端,如果用戶登錄並替換它: <a href="#" class="not-logged-in">。如果點擊了它,它會提醒他們他們需要登錄。問題是我可能有一些css樣式的#vote。如果我做到了<a href="#" id="vote" class="not-logged-in">它會觸發ajax調用和警報,所以我必須用a check包裝ajax調用以查看not-loggin-in類不存在,但它看起來有點乏味爲所有具有ajax調用的點擊函數執行此操作。或者,我會調用父ID並設置#parentId a {}的樣式?或者有沒有更好的方法?我不確定人們通常會做什麼,所以尋找一些意見。謝謝!如果用戶未登錄,則發送提醒消息

回答

0

如何:

的HTML:

<body class="not-logged-in"> -- or -- <body class="logged-in"> 
<a href="/vote/13" class="vote">Vote!</a> 

jQuery的:

$('body.logged-in .vote').click(function(){ 
    $(this).append($.get($(this).attr('href')); 
    return false; 
}); 
+0

謝謝,沒有想到這樣做。 – Roger 2009-10-17 17:07:14

0

如果用於a#vote元素的點擊處理程序綁定到vote ID,你會必須更改註銷用戶的ID或向點擊處理程序添加條件。

您提到在繼續進行AJAX調用之前,您不希望檢查not-logged-in類,所以我假設這意味着您寧願單獨保留點擊處理程序並想出其他方法該鏈接看起來像投票鏈接,但不像投票鏈接。

你可以做一個備用的ID,並給它相同的造型,就像這樣:

HTML:

<a href="#" id="fakeVote"> 

CSS:

 
#vote, #fakeVote { 
    /* CSS here */ 
} 

約的好處這是你可以爲a#fakeVote元素添加一個新的點擊處理程序來提醒t他註銷了用戶。

0

如果您想要減少每次點擊的DOM查找時間,只需將「loggedIn」類附加到body元素,並在頁面加載後執行檢查。

var loggedIn = $('body').hasClass('loggedIn'); 

現在,您不必檢查鏈接本身,而是檢查該變量。

或者,爲您的ajax調用編寫一個包裝器。

$.fn.ajaxLoggedIn = function() { 
    if (loggedIn) { 
    $.ajax.apply(this, arguments); 
    } 
    else { 
    alert('You are not logged in'); 
    } 
}