0

我正在使用 jQuery Block UI 插件。如下所示;

$('#someid .someclass').click(function(){
  var id = "someidx";
  var newval = "somevalx";
  $.blockUI({
    onBlock: function() {
      $.ajax({
        type: 'POST',
        url: 'target.php',
        data: 'data='+newval,
        cache: false,
        success: function(result) {
          if(result == "true"){
            $('#mymessage').addClass("asuccess");
          }else{
            $('#mymessage').addClass("aerror");
          }
        }
      });
     },
     onUnblock: function(){
       //some functions;
     },
     message: $('#mymessage'),  
  });
  $(this).hide();
  $(this).siblings('.class1').hide();
  $(this).siblings('.class2').show();
  $(this).parent("td").siblings(".class3").html(newval);
});

这工作正常。但是我想在里面做一些功能if(result == "true")。也就是说,如果 ajax 结果为真,我想做这些事情。我想要做;

success: function(result) {
  if(result == "true"){
    $('#mymessage').addClass("asuccess");
    $(this).hide();
    $(this).siblings('.class1').hide();
    $(this).siblings('.class2').show();
    $(this).parent("td").siblings(".class3").html(newval);
  }else{
    $('#mymessage').addClass("aerror");
  }
}

如果 ajax 返回为真,则将这些东西放入成功嵌套中。但这在if(result == "true")嵌套中不起作用。我怎样才能做到这一点?

4

3 回答 3

4

您可以在顶层函数中设置一个变量,this并在内部函数中使用它。

$('#someid .someclass').click(function () {

    var self = $(this);

    var id = "someidx";
    var newval = "somevalx";
    $.blockUI({
        onBlock: function () {
            $.ajax({
                type: 'POST',
                url: 'target.php',
                data: 'data=' + newval,
                cache: false,
                success: function (result) {
                    if (result == "true") {
                        $('#mymessage').addClass("asuccess");
                        self.hide();
                        self.siblings('.cancel').hide();
                        self.siblings('.edit').show();
                        self.parent("td").siblings(".cell2").html(newval);
                    } else {
                        $('#mymessage').addClass("aerror");
                    }
                }
            });
        },
        onUnblock: function () {
            //some functions;
        },
        message: $('#mymessage'),

    });
});
于 2013-03-29T13:52:55.797 回答
3

添加

    context: self,  // oops - fixed now (was "this")

接您的$.ajax()电话。这将确保this在调用 AJAX 回调时引用单击的元素。没有那个,this指的是 ajax 设置对象,而不是原始的 DOM 元素。

编辑——你还需要 Daniel Imms 的回答中的“self”变量(如果没有这个“上下文”的东西,它本身将完全适合)。

于 2013-03-29T13:50:55.897 回答
0
$('#someid .someclass').click(function(){
    var self = $(this);
    // other code
});

您现在可以self在 AJAX 处理程序中使用作为单击元素的引用。

于 2013-03-29T13:52:57.237 回答