如果要求用户登录时向用户发送警报消息的最佳方式是什么,但同时避免使用ajax呼叫?我可能有像<a href="#" id="vote">
这样的代码,它会根据点击触发ajax函数。我想我会检查服务器端是否有用户登录并将其替换为:
<a href="#" class="not-logged-in">
。如果单击它,它将提醒他们需要登录。问题是我可能有#vote的一些CSS样式。如果我改为<a href="#" id="vote" class="not-logged-in">
它会触发ajax调用和警报,所以我必须用一个检查来包装ajax调用,看看not-loggin-in类不存在,但它对于我所有具有ajax调用的click函数来说,这似乎有点乏味。或者我会调用父ID并将样式设置为#parentId a {}?或者有更好的方法吗?我不确定人们通常做什么,所以寻找一些意见。谢谢!
答案 0 :(得分: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;
});
答案 1 :(得分:0)
如果a#vote
元素的点击处理程序与vote
ID绑定,则您必须更改已注销用户的ID或向点击处理程序添加条件。
你提到你在继续AJAX调用之前不想检查not-logged-in
类,所以我假设这意味着你宁愿单独留下点击处理程序并想出其他一些让链接看起来像投票链接但不像投票链接那样的方式。
您可以制作一个替代ID并给它相同的样式,如下所示:
HTML:
<a href="#" id="fakeVote">
<强> CSS:强>
#vote, #fakeVote { /* CSS here */ }
关于这一点的好处是你可以为a#fakeVote
元素添加一个新的点击处理程序,以提醒已注销的用户。
答案 2 :(得分: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');
}
}