未在内联事件处理程序中调用JavaScript
以下是我的JavaScript:未在内联事件处理程序中调用JavaScript,javascript,forms,Javascript,Forms,以下是我的JavaScript: <script> //Make sure DOM is ready before mucking around. $(document).ready(function() { console.log('DOM is ready!'); var socket = io.connect('http://localhost:8080'); //Each document field w
<script>
//Make sure DOM is ready before mucking around.
$(document).ready(function()
{
console.log('DOM is ready!');
var socket = io.connect('http://localhost:8080');
//Each document field will have the following identifiers:
//classCode, description, professor, file
function uploadForm()
{
console.log('Creating FileReader object...');
var reader = new FileReader();
reader.onload = function(evt)
{
console.log('Read complete.');
console.log('Creating JSON object...')
var documentData =
{
'classCode':$('#classCode').val(),
'professor':$('#professor').val(),
'description':$('#description').val(),
'file':
{
'data': evt.target.result,
'metadata': document.getElementById('file').files[0]
},
'dateUploaded':new Date(),
'rating':0
};
console.log(documentData);
console.log('Adding document.');
socket.emit('addDocument', documentData);
};
console.log('Reading as binary string...');
reader.readAsDataURL(document.getElementById('file').files[0]);
};
});
</script>
//在乱搞之前,确保DOM准备好了。
$(文档).ready(函数()
{
log('DOM已准备就绪!');
var socket=io.connect('http://localhost:8080');
//每个文档字段将具有以下标识符:
//类代码、描述、教授、文件
函数uploadForm()
{
log('正在创建FileReader对象…');
var reader=new FileReader();
reader.onload=函数(evt)
{
console.log('读取完成');
log('正在创建JSON对象…')
var documentData=
{
“类代码”:$(“#类代码”).val(),
'教授':$('教授').val(),
'description':$('#description').val(),
“文件”:
{
“数据”:evt.target.result,
“元数据”:document.getElementById('file')。文件[0]
},
“dateUploaded”:新日期(),
“评级”:0
};
控制台日志(文档数据);
console.log(“添加文档”);
发出('addDocument',documentData');
};
log('读取为二进制字符串…');
reader.readAsDataURL(document.getElementById('file').files[0]);
};
});
我的HTML表单:
<form onsubmit = 'uploadForm()'>
<input type = 'text' placeholder = 'Class code' id = 'classCode' required/>
<input type = 'text' placeholder = 'Document description' id = 'description' required/>
<input type = 'text' placeholder = 'Professor' id = 'professor' required/>
<input type = 'file' id = 'file' required/>
<input type = 'submit' value = 'Upload!'/>
</form>
当我通过调用uploadForm()
时,此代码以前是有效的。单击
元素上的事件,但这将忽略
元素上的
所需属性检查。因此,现在我试图在
的提交事件上调用uploadForm()
,但它没有正常运行reader.onload
事件应在reader.readDataAsURL()完成后调用,但实际情况并非如此。我已经试过jQuery的.submit()
,但没有用
编辑:终于捕捉到了用我的手机录制的错误<代码>未捕获引用错误:未定义uploadForm
Onsubmit应设置为uploadForm()(即您要计算的表达式),而不仅仅是要执行的函数的名称。我认为您可以尝试对代码进行一些更改
您的uploadForm()
函数必须只有
reader.readAsDataURL(document.getElementById('file').files[0])代码>
所有其他东西都可以放在document.ready()
这样,读卡器对象将准备就绪,当您调用函数时,readAsDataURL
将触发onLoad事件
试试这个。uploadForm
函数不在全局范围内,因此无法找到它。只需在文档的外部定义函数。ready
回调或通过将其分配给窗口的属性使其成为全局函数
对象:
window.uploadForm = function() {
// ...
};
或者,由于您使用的是jQuery,因此更好的方法是将事件处理程序与jQuery绑定,而不是使用内联事件处理程序:
$('#yourFormID').on('submit', function() {
// ...
});
函数“uploadForm”在DOM中是不可见的,因为函数“uploadForm”是在另一个函数中定义的。在代码中,另一个函数的意思是:$(document).ready(function(){…})
在jQuery中,可以像这样绑定事件:
HTML:
....
JS:
//在乱搞之前,确保DOM准备好了。
$(文档).ready(函数()
{
log('DOM已准备就绪!');
var socket=io.connect('http://localhost:8080');
//每个文档字段将具有以下标识符:
//类代码、描述、教授、文件
函数uploadForm()
{
//....
};
// ↓↓↓↓↓在此绑定事件↓↓↓↓↓
$(“#myFormID”)。提交(上传形式);
});
仍然不起作用。我还尝试了onsubmit='uploadForm();',onsubmit='uploadForm()',onsubmit='uploadForm();'onSubmit='uploadForm()'
<form id="myFormID">
....
</form>
<script>
//Make sure DOM is ready before mucking around.
$(document).ready(function()
{
console.log('DOM is ready!');
var socket = io.connect('http://localhost:8080');
//Each document field will have the following identifiers:
//classCode, description, professor, file
function uploadForm()
{
//....
};
// ↓↓↓↓↓Bind events here↓↓↓↓↓
$("#myFormID").submit(uploadForm);
});
</script>