Javascript 如何跟踪jQuery对话框调用的操作?
我有点困惑:) 我有一个供用户投票的链接。点击链接会生成一个jQuery AJAX调用,检查此人是否登录。如果没有,对话框将显示要登录的表单 但问题是jQuery调用登录时,弹出框的全部内容都在不同的位置 我需要做的是检查用户是否成功登录,并更新投票计数 我正在这个网站上做这件事: 以下是迄今为止我的jQuery代码:Javascript 如何跟踪jQuery对话框调用的操作?,javascript,jquery,formatting,Javascript,Jquery,Formatting,我有点困惑:) 我有一个供用户投票的链接。点击链接会生成一个jQuery AJAX调用,检查此人是否登录。如果没有,对话框将显示要登录的表单 但问题是jQuery调用登录时,弹出框的全部内容都在不同的位置 我需要做的是检查用户是否成功登录,并更新投票计数 我正在这个网站上做这件事: 以下是迄今为止我的jQuery代码: <script type="text/javascript"> $(document).ready(function() { var $dialog =
<script type="text/javascript">
$(document).ready(function()
{
var $dialog = $('#loginpopup')
.dialog({
autoOpen: false,
title: 'Login Dialog'
});
$("#newprofile").click(function () {
$("#login_div").hide();
$("#newprofileform").show();
});
$('.vote_up').click(function()
{
problem_id = $(this).attr("data-problem_id");
var dataString = 'problem_id='+ problem_id + '&vote=+';
$.ajax({
type: "POST",
url: "/problems/vote.php",
dataType: "json",
data: dataString,
success: function(data)
{
// ? :)
alert (data);
},
error : function(data)
{
errorMessage = data.responseText;
if ( errorMessage == "not_logged_in" )
{
// Try to create the popup that asks user to log in.
$dialog.dialog('open');
// prevent the default action, e.g., following a link
return false;
}
else
{
alert ("not");
}
//alert(JSON.stringify(data));
}
});
//Return false to prevent page navigation
return false;
});
$('.vote_down').click(function()
{
alert("down");
problem_id = $(this).attr("data-problem_id");
var dataString = 'problem_id='+ problem_id + '&vote=-';
//Return false to prevent page navigation
return false;
});
});
</script>
$(文档).ready(函数()
{
变量$dialog=$(“#loginpopup”)
.对话({
自动打开:错误,
标题:“登录对话框”
});
$(“#新建配置文件”)。单击(函数(){
$(“#login_div”).hide();
$(“#newprofileform”).show();
});
$('.vote_up')。单击(函数()
{
problem_id=$(this).attr(“数据问题_id”);
var dataString='problem_id='+problem_id+'&投票=+';
$.ajax({
类型:“POST”,
url:“/problems/vote.php”,
数据类型:“json”,
数据:dataString,
成功:功能(数据)
{
// ? :)
警报(数据);
},
错误:函数(数据)
{
errorMessage=data.responseText;
如果(errorMessage==“未登录”)
{
//尝试创建请求用户登录的弹出窗口。
$dialog.dialog('open');
//防止默认操作,例如,跟踪链接
返回false;
}
其他的
{
警惕(“不”);
}
//警报(JSON.stringify(数据));
}
});
//返回false以防止页面导航
返回false;
});
$('.vote_down')。单击(函数()
{
警惕(“下降”);
problem_id=$(this).attr(“数据问题_id”);
var dataString='problem_id='+problem_id+'&vote=-';
//返回false以防止页面导航
返回false;
});
});
除了在$dialog.dialog('open')行之后,它都可以正常工作代码>-我不知道如何
获得失败成功的信号,但不知道如何
更新已投票的项目,因为它只是页面中可投票的众多项目之一
我该如何做这两件事?试试这种方法:
在登录对话框的div
中有一个隐藏的输入
在执行对话框('open')
在登录
按钮的成功回调中,单击,从隐藏的输入中检索问题id
,并执行向上投票或向下投票
希望有帮助
编辑:(尝试在OP的第二条评论后编写一个可行的示例)
$(文档).ready(函数(){
变量$dialog=$(“#loginpopup”)
.对话({
自动打开:错误,
标题:“登录对话框”
});
var$problemId=$('theProblemId','loginpopup');
$(“#新建配置文件”)。单击(函数(){
$(“#login_div”).hide();
$(“#newprofileform”).show();
});
$('.vote_up')。单击(函数(){
var problem_id=$(this.attr(“数据问题_id”);
voteUp(问题编号);
//返回false以防止页面导航
返回false;
});
var voteUp=函数(问题编号){
var dataString='problem_id='+problem_id+'&投票=+';
$.ajax({
类型:“POST”,
url:“/problems/vote.php”,
数据类型:“json”,
数据:dataString,
成功:功能(数据){
// ? :)
警报(数据);
},
错误:函数(数据){
errorMessage=data.responseText;
如果(errorMessage==“未登录”){
//将当前问题id设置为对话框中的问题id
$problemId.val(问题id);
//尝试创建请求用户登录的弹出窗口。
$dialog.dialog('open');
//防止默认操作,例如,跟踪链接
返回false;
}
否则{
警惕(“不”);
}
//警报(JSON.stringify(数据));
}
});
};
$('.vote_down')。单击(函数(){
警惕(“下降”);
problem_id=$(this).attr(“数据问题_id”);
var dataString='problem_id='+problem_id+'&vote=-';
//返回false以防止页面导航
返回false;
});
$(“#登录按钮”,“#登录应用程序”)。单击(函数(){
$.ajax({
url:'url进行登录',
成功:函数(){
//现在打电话给科特
voteUp($problemId.val());
}
});
});
});
我认为这种方法存在一个固有的问题,在用户单击特定问题之前,我无法使用该问题id设置隐藏字段。页面上有许多问题,只有单击一个问题,系统才会知道使用哪个问题id。这有意义吗?考虑到这一局限性,还有什么方法可以使这项工作顺利进行吗?通过一点重构,我仍然认为这是可行的,即使有您提到的约束
<script type="text/javascript">
$(document).ready(function() {
var $dialog = $('#loginpopup')
.dialog({
autoOpen: false,
title: 'Login Dialog'
});
var $problemId = $('#theProblemId', '#loginpopup');
$("#newprofile").click(function () {
$("#login_div").hide();
$("#newprofileform").show();
});
$('.vote_up').click(function() {
var problem_id = $(this).attr("data-problem_id");
voteUp(problem_id);
//Return false to prevent page navigation
return false;
});
var voteUp = function(problem_id) {
var dataString = 'problem_id=' + problem_id + '&vote=+';
$.ajax({
type: "POST",
url: "/problems/vote.php",
dataType: "json",
data: dataString,
success: function(data) {
// ? :)
alert(data);
},
error : function(data) {
errorMessage = data.responseText;
if (errorMessage == "not_logged_in") {
//set the current problem id to the one within the dialog
$problemId.val(problem_id);
// Try to create the popup that asks user to log in.
$dialog.dialog('open');
// prevent the default action, e.g., following a link
return false;
}
else {
alert("not");
}
//alert(JSON.stringify(data));
}
});
};
$('.vote_down').click(function() {
alert("down");
problem_id = $(this).attr("data-problem_id");
var dataString = 'problem_id=' + problem_id + '&vote=-';
//Return false to prevent page navigation
return false;
});
$('#loginButton', '#loginpopup').click(function() {
$.ajax({
url:'url to do the login',
success:function() {
//now call cote up
voteUp($problemId.val());
}
});
});
});
</script>