Javascript 如何跟踪jQuery对话框调用的操作?

Javascript 如何跟踪jQuery对话框调用的操作?,javascript,jquery,formatting,Javascript,Jquery,Formatting,我有点困惑:) 我有一个供用户投票的链接。点击链接会生成一个jQuery AJAX调用,检查此人是否登录。如果没有,对话框将显示要登录的表单 但问题是jQuery调用登录时,弹出框的全部内容都在不同的位置 我需要做的是检查用户是否成功登录,并更新投票计数 我正在这个网站上做这件事: 以下是迄今为止我的jQuery代码: <script type="text/javascript"> $(document).ready(function() { var $dialog =

我有点困惑:)

我有一个供用户投票的链接。点击链接会生成一个jQuery AJAX调用,检查此人是否登录。如果没有,对话框将显示要登录的表单

但问题是jQuery调用登录时,弹出框的全部内容都在不同的位置

我需要做的是检查用户是否成功登录,并更新投票计数

我正在这个网站上做这件事:

以下是迄今为止我的jQuery代码:

<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>