javascript - Jquery 函数在错误时间提交

标签 javascript jquery html ajax twitter-bootstrap

我当前的问题是我试图在特定事件中使用 jquery 调用函数,但它在错误的事件中运行。我要调用的函数是:

function resolvedAjax(tid){
    $.ajax({type: 'post',url: 'resolveTicket.php',data: 'tid=' +tid, success: function(s){
        $('#resolvedTicket').html("Resolved");
        mainTable();
    }});
}

我试图通过这个 jquery block 来调用它:

$(document).on('click', '.viewTD', function(){
   var tid = $(this).closest('tr').find('.tidTD input').val();
   $.ajax({
       type: 'post',
        url: 'modalInfo.php',
       data: 'tid=' +tid,
       success: function(d){
           $('.modal-body').html(d);
           $('.modal-title').html("Ticket ID: " + tid);
           $('#myModal').modal('show');
           var time = $('#time').val();
           var desc = $('#description').val();
           $("#addComment").click(function(){
           $.ajax({type: 'post', data: { myData: $('#commentAdd').serialize() }, url: "addComment.php", success: function(info){
             $.ajax({
                type: 'post',
                url: 'modalInfo.php',
                data: 'tid=' +tid,
                success: function(d){
                    $('.modal-body').html(d);
                    $('.modal-title').html("Ticket ID: " + tid);
                    $('#myModal').modal('show');
                }});
           }});
           });
       }

   });
   $('#Resolved').click(resolvedAjax(tid));
});

问题是,当我通过单击 viewTD 类打开模式时,它运行的函数并不完全是我想要的。我试图获取它,以便如果您单击模式中的已解决按钮(其 ID 为 Resolved),它将运行该函数。目前,它一打开就运行它,不会等到已解决的按钮关闭。 .click() 不是正确的触发器吗?我正在尝试优化这段代码,它是多余的,并且可能构造得尽可能糟糕,这就是为什么我正在研究函数实现以简化代码并使其更正确,但目前这个函数有问题,我不知道为什么。

(额外信息以防需要) 模态框的主体是由 jquery 代码第二位中的第一个 ajax 调用构造的。模式内部有一个表格,其中包含票证信息以及用于添加评论和解决按钮的表单。我拥有所有这些冗余的嵌套代码,因为这是我可以添加注释的唯一方法,并且它解决了一些问题(尽管它已经创建了一些问题)。我想如果我能让其中一些功能正常工作,我就能让一切正常工作,但现在我遇到的问题是打开模式并立即解决票证,而不是让我正确查看它并添加评论。

我知道这可能很简单,但我仍在尝试学习使用 jquery,因为我过去没有太多使用它,抱歉,如果有任何困惑,我可以尝试并澄清任何需要的内容。

谢谢

编辑我现在有了这个代码,但它仍然无法工作:

$(document).on('click', '.viewTD', function(){
       window.tid = $(this).closest('tr').find('.tidTD input').val();
       $.ajax({
           type: 'post',
            url: 'modalInfo.php',
           data: 'tid=' +tid,
           success: function(d){
               $('.modal-body').html(d);
               $('.modal-title').html("Ticket ID: " + tid);
               $('#myModal').modal('show');
               var time = $('#time').val();
               var desc = $('#description').val();

           }

       });

    });
    $( document ).on( "click", "#addComment", function() {
        $.ajax({type: 'post', data: { myData: $('#commentAdd').serialize() }, url: "addComment.php", success: function(info){
        }});
    });
    $( document ).on( "click", "#Resolved",  resolvedAjax(window.tid));

我似乎无法在 viewTD 点击事件的范围之外访问 tid。我尝试过窗口、全局变量和对象,但无法使其工作。

最佳答案

你的处理程序

 $("#addComment").click(function()

在另一个处理程序内。

$(document).on('click', '.viewTD', function(){

就编译器而言,第二个处理程序不存在,因为它位于错误的范围内。您需要将该 #addComment 处理程序移至根范围。当然,这需要您重写该函数 - 但这就是它不响应点击的原因。

此外,.click 也不错,但更好的语法是使用 .on,因为它允许您更好地确定处理程序的范围。

  $( document ).on( "click", "#addComment", function() {
      console.log( "foo!");
    });

关于javascript - Jquery 函数在错误时间提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37306195/

相关文章:

javascript - 文件大小的 Parsley.js 验证?

javascript - jQuery width() 在加载时不正确

html - 具有 3 种背景颜色的 body 背景

javascript - 无法在 jQuery 中添加边框半径

javascript - html 页面在本地时有效,但在云端 ide 时无效

javascript - Sencha touch 中的 Accordion

jquery - 调整图像大小以适合屏幕jquery mobile

php - 想要添加一列并最终显示结果?

php - 如何在不使用提交的情况下发布?

javascript - 引用引用 DOM 操作