我有一个功能,可以执行某些操作并且效果很好。现在我想添加一个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%的文件)
这是以这种方式还是其他方式实现的?
以下是一些代码:
$('.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
}
}
});
});
我希望这可以解释我的情况:)
答案 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();
}