Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在if语句中使用jquery回调函数?_Javascript_Jquery_Callback - Fatal编程技术网

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

Javascript 如何在if语句中使用jquery回调函数?,javascript,jquery,callback,Javascript,Jquery,Callback,我有一个功能,它执行一些事情,它的工作非常好。现在我想添加一个引导模式,并在模式关闭时执行相同的代码。但我的问题是,我必须检查用户状态。有没有一种方法可以执行这段代码,而不是将所有内容复制两次 if(USERTYPE == 0) { $("#fastRegisterModal").modal('show'); $("#fastRegisterModal").on('hidden', function() { //Code for registration and upload c

我有一个功能,它执行一些事情,它的工作非常好。现在我想添加一个引导模式,并在模式关闭时执行相同的代码。但我的问题是,我必须检查用户状态。有没有一种方法可以执行这段代码,而不是将所有内容复制两次

if(USERTYPE == 0) {
  $("#fastRegisterModal").modal('show');
  $("#fastRegisterModal").on('hidden', function() {
    //Code for registration and upload code
  }
} else {
  //upload code
}
我想将其包含在多个jquery函数(主要是.live函数)中,我不想将“上传代码”移动到普通的js函数中(我将.js文件按原样编写,我不想更改70%的文件)

这是可能的吗

编辑 下面是更多的代码:

$('.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
        }
    }
});
});
我希望这能更好地解释我的情况:)

创建函数

它比两行代码和一次剪切粘贴要多做多少工作

抵制重构往往会带来长期的痛苦

像这样的东西不管用吗?从你所拥有的东西中,你要付出多少努力才能达到目的

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();
}

因此,让我们假设有一个很好的理由您不想编写“普通”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();
}

你能展示更多的代码吗。你为什么不想使用一个“普通”的js函数是没有道理的。你没有为我提供足够的代码,创建一个函数是在多个函数中调用相同代码的唯一方法。。。也许您更喜欢创建一个新的jQuery方法?像@Popleak一样,这里的上下选票都很奇怪。也许我在这里遗漏了一些东西。我添加了更多的代码。我希望这能更好地解释我的情况。但他仍然在创建一个函数,并将他的代码移到其中?用少量的代码,这可能是合适的。这两个选项是创建“普通”js函数的唯一选择(据我所知),避免了复制粘贴(这一点至关重要)。