如何在if语句中使用jquery回调函数?

时间:2013-03-08 12:21:44

标签: javascript jquery callback

我有一个功能,可以执行某些操作并且效果很好。现在我想添加一个bootstrap模式并在模态关闭时执行相同的代码。但我的问题是我必须检查用户状态。有没有办法如何执行此代码而不是复制所有内容两次?

if(USERTYPE == 0) {
  $("#fastRegisterModal").modal('show');
  $("#fastRegisterModal").on('hidden', function() {
    //Code for registration and upload code
  }
} else {
  //upload code
}

我想将它包含在多个jquery函数(主要是.live函数)中,我不想将“上传代码”移动到普通的js函数中(我把.js文件写成了原样并且我没有想要改变70%的文件)

这是以这种方式还是其他方式实现的?

EDITED

以下是一些代码:

$('.someAction').live('click', function(event) {
// Init section
var data1 = $(".getData1").val();
var data2 = $(".getData2").val();

// I want to add this modal check before exsisting code

if(USERTYPE == 0) {
    $("#fastRegisterModal").modal('show').on('hidden', function() {
        var email = $(".getModalEmail").val();
        var pass = $(".getModalPass").val();

        $.ajax({
            url: "actions/fastRegister",
            type: 'POST',
            data: {email: email, pass: pass}, 
            success: function(data) {
                if (data.success == 1) {
                    // continue with existing block of code
                }
            }
        });
    });
}

// Existing block of code

$.ajax({
    url: "actions/someAction",
    type: 'POST',
    data: {data1: data1, data2: data2}, 
    success: function(data) {
        if (data != '') {
            // show success
        }
    }
});
});

我希望这可以解释我的情况:)

2 个答案:

答案 0 :(得分:2)

创建功能。

比两行代码和剪切和粘贴还要多做多少工作?

抵制重构往往会导致长期的痛苦。

这样的东西不起作用吗?从你拥有的东西到那里需要多少努力?

var doSomeAction = function () {
    $.ajax({
          url: "actions/someAction",
          type: 'POST',
          data: {data1: data1, data2: data2}, 
          success: function(data) {
              if (data != '') {
                // show success
              }
          }
     });

 };

 if(USERTYPE == 0) {
    $("#fastRegisterModal").modal('show').on('hidden', function() {
       var email = $(".getModalEmail").val();
       var pass = $(".getModalPass").val();

       $.ajax({
          url: "actions/fastRegister",
          type: 'POST',
          data: {email: email, pass: pass}, 
         success: function(data) {
            if (data.success == 1) {
                doSomeAction();
            }
          }
      });
    });
} else {
   doSomeAction();
}

答案 1 :(得分:2)

所以让我们假设有一个很好的理由你不想写一个“正常”的js函数。

你可以扩展jQuery。

$.fn.extend({
    doSomething: function(){
        // do something with $(this)
    }
});

and then

if(USERTYPE == 0) {
  $("#fastRegisterModal").modal('show').on('hidden', function() {
    $(this).doSomething();
  }
} else {
  $("#fastRegisterModal").doSomething();
}    

或者您可以创建自定义绑定并触发它。

$("#fastRegisterModal").on('doSomething', function(){
     // do something with $(this)
});

if(USERTYPE == 0) {
  $("#fastRegisterModal").modal('show').on('hidden', function() {
    $(this).trigger('doSomething');
  }
} else {
  $("#fastRegisterModal").trigger('doSomething');
}

代码中的注释显示了两种不同的事情

if(USERTYPE == 0) {
  $("#fastRegisterModal").modal('show');
  $("#fastRegisterModal").on('hidden', function() {
    //Code for registration and upload code
    $(this).trigger('doRegistration').trigger('doUpload');
    // or $(this).doRegistration().doUpload();
  }
} else {
    //upload code
    $(this).trigger('doUpload');
    // or $(this).doUpload();
}