Javascript dropzone-var在另一个函数';让我们第一次点击
我有一个dropzone注册表,我想用插件验证它(字段)。我在dropzone init中调用这个插件,在其函数的回调中处理dropzone队列并附加表单数据 问题是,我第一次单击Javascript dropzone-var在另一个函数';让我们第一次点击,javascript,jquery,xmlhttprequest,dropzone.js,Javascript,Jquery,Xmlhttprequest,Dropzone.js,我有一个dropzone注册表,我想用插件验证它(字段)。我在dropzone init中调用这个插件,在其函数的回调中处理dropzone队列并附加表单数据 问题是,我第一次单击Send按钮时,什么也没发生:它只是进入函数的回调,什么也不做(myDropzone不工作),只有console.log()(我放在那里进行调试) 这是我正在使用的插件: (function($) { $.fn.formly = function(callback) { $('a#click')
Send
按钮时,什么也没发生:它只是进入函数的回调,什么也不做(myDropzone
不工作),只有console.log()
(我放在那里进行调试)
这是我正在使用的插件:
(function($) {
$.fn.formly = function(callback) {
$('a#click').on('click', function() {
if (callback) {
var clientInfo = form.find(':input').serializeArray();
clientInfo.splice(-1, 1);
clientInfo.splice(-1, 1);
// Password hash function
var p = $('#reg_pwd').val(),
c = $('#confirm_pwd').val(),
shaObj = new jsSHA('SHA-512', 'TEXT');
shaObj.update(p);
var p_hash = shaObj.getHash("HEX"),
shaObj = new jsSHA('SHA-512', 'TEXT');
shaObj.update(c);
var c_hash = shaObj.getHash("HEX");
callback(clientInfo, p_hash, c_hash);
}
});
};
})( jQuery );
这是dropzone初始化:
init: function() {
var myDropzone = this;
$('#register').formly(function(clientInfo, p_hash, c_hash) {
console.log(myDropzone);
myDropzone.processQueue();
myDropzone.on('sending', function(data, xhr, formData) {
formData.append('client_info', JSON.stringify(clientInfo)),
formData.append('particular', 0),
formData.append('reg_pwd', p_hash),
formData.append('confirm_pwd', c_hash)
});
});
myDropzone.on('success', function(file, response) {
myDropzone.removeFile(file);
console.log( 'Error: ' + response );
});
}
我可以看到控制台中记录的对象
这就像我第一次单击按钮时没有向服务器发送任何内容(没有xhr请求)
第二次单击“发送”时,它确实工作了(它发送xhr请求),我得到了一个服务器响应(myDropzone.on('success'
)
为什么在第一次之后它会工作?我做错了什么?我如何修复它?我对代码为什么会这样做有一个模糊的想法,但我缺乏必要的知识(理论)来正确解释它 无论如何,我(认为)找到了一个正确的方法,我希望它能达到好的技术标准。我现在使用一个函数在dropzone init中填充一个作用域对象,以便
。on('sending')
(应该在插件回调之外)可以访问表单数据:
init: function() {
var myDropzone = this,
client = {};
function getClientData(clientInfo, p_hash, c_hash) {
client.clientInfo = clientInfo;
client.p_hash = p_hash;
client.c_hash = c_hash;
myDropzone.processQueue();
};
$('#register').formly(function(clientInfo, p_hash, c_hash) {
getClientData(clientInfo, p_hash, c_hash);
});
myDropzone.on('sending', function(data, xhr, formData) {
formData.append('client_info', JSON.stringify(client.clientInfo)),
formData.append('particular', 0),
formData.append('reg_pwd', client.p_hash),
formData.append('confirm_pwd', client.c_hash)
});
myDropzone.on('success', function(file, response) {
myDropzone.removeFile(file);
console.log( 'Error: ' + response );
})
}
我很乐意接受另一个解释原始代码行为的答案,并有更好的方法(如果有的话)。我对代码为什么会这样做有一个模糊的想法,但我缺乏必要的知识(理论)来正确解释它 无论如何,我(认为)找到了一个正确的方法,我希望它能达到好的技术标准。我现在使用一个函数在dropzone init中填充一个作用域对象,以便
。on('sending')
(应该在插件回调之外)可以访问表单数据:
init: function() {
var myDropzone = this,
client = {};
function getClientData(clientInfo, p_hash, c_hash) {
client.clientInfo = clientInfo;
client.p_hash = p_hash;
client.c_hash = c_hash;
myDropzone.processQueue();
};
$('#register').formly(function(clientInfo, p_hash, c_hash) {
getClientData(clientInfo, p_hash, c_hash);
});
myDropzone.on('sending', function(data, xhr, formData) {
formData.append('client_info', JSON.stringify(client.clientInfo)),
formData.append('particular', 0),
formData.append('reg_pwd', client.p_hash),
formData.append('confirm_pwd', client.c_hash)
});
myDropzone.on('success', function(file, response) {
myDropzone.removeFile(file);
console.log( 'Error: ' + response );
})
}
我很乐意接受另一个解释原始代码行为的答案,并有更好的方法(如果有的话).我的猜测是,第一次不起作用,因为您创建的事件监听器会触发您在函数中对表单的验证,该函数只在发送时调用,而这会在按下按钮之后发生。因此,第一次单击时没有事件监听器,这是在第一次单击时创建的,然后在su上工作b连续单击。我不明白,('sending')上的
中唯一的代码是我试图附加到图像的表单数据(这四行以formData.append
开头。不过我不是javascript专家。我缺少什么?好吧,现在我明白了,dropzone只监听init内部的内容,而不监听函数的回调,这就是为什么第一次打开('sending'))
在回调中,dropzone不知道,但第二次它“有点知道”…我的猜测是,第一次不起作用,因为您创建了事件侦听器,该事件侦听器在一个函数中触发窗体的验证,该函数只在发送时调用,而这发生在按下按钮之后。因此,当您第一次单击“没有事件侦听器”时,将在第一次单击时创建该事件侦听器,然后在SUB上工作频繁单击。我不明白,('sending')
上的中唯一的代码是我试图附加到图像的表单数据(这四行以formData.append
开头。不过我不是javascript专家。我缺少什么?好吧,现在我明白了,dropzone只监听init内部的内容,而不监听函数的回调,这就是为什么第一次打开('sending'))
在回调中,dropzone不知道,但第二次它“有点知道”。。。