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函数的唯一选择(据我所知),避免了复制粘贴(这一点至关重要)。