Javascript object.onsubmit事件未激活
首先是我的代码,全部在一个.hbs文件中:Javascript object.onsubmit事件未激活,javascript,node.js,express,quill,Javascript,Node.js,Express,Quill,首先是我的代码,全部在一个.hbs文件中: <form id='specialform'> <input name='about' type='hidden'> <div id='editor'><p>Type something :D</p></div> <button type='submit'>Reload</button> </form> <script
<form id='specialform'>
<input name='about' type='hidden'>
<div id='editor'><p>Type something :D</p></div>
<button type='submit'>Reload</button>
</form>
<script>
var form = document.querySelector('#specialform');
form.onsubmit = function() {
var about = document.querySelector('input[name=about]');
about.value = JSON.stringify(quill.getContents());
console.log('Submitted!');
console.log('Submitted!', 'Serialized:', $(form).serialize(), 'Serialize Array:', $(form).serializeArray());
alert('Open Console!');
return false;
}
</script>
没有返回错误就无法工作;声明,但确实可以使用它!我更改了原来的函数并包含了return,但遗憾的是它仍然不起作用
编辑4:
我又玩了一些虚拟函数,并隔离了这个问题。
它源于这一行:
console.log('Submitted!', 'Serialized:', $(form).serialize(), 'Serialize Array:', $(form).serializeArray());
有人能告诉我为什么它不起作用吗
如果有,可以忽略该行的问题:函数e{e.preventDefualt;…},但是更改只会绕过问题,而不会修复它
编辑5:
使用e.preventDefault时,该函数可以工作,但仍然没有第二个console.log。很明显,Handlebar在$form.serialize上有问题,或者我太笨了,看不到我的错误。谢谢所有帮助过我的人
编辑6:
问题已解决!$。serialize使用jquery库,在node.js中使用该库并不容易,显然必须先导入。我感谢所有帮助我解决这个问题的人 试试这个
var form = document.querySelector('#specialform');
您在使用id选择器时错过了一个哈希。querySelector需要一个有效的CSS选择器
document.querySelector('specialform');
就是说,嘿,JS-获取所有特殊形式的元素。如果页面上有元素,那么就可以了
相反,你可能想要
document.querySelector('#specialform');
也就是说,hey JS-获取ID为specialform的所有元素
如果你知道你是通过身份证的话,我会用这个。
它比查询更快,因为它不关心类、属性等。
如果您不确定查询选择器,那么它就不太容易出错。
在我看来,如果您的结构更复杂,querySelector更有意义。请注意,与下面的答案无关,您有语法错误。您需要使用}关闭函数;在输入3之前,不要返回false,而是要使用e.preventDefault。表单提交并刷新页面的原始版本是吗?显然它确实是这样做的。我以为它什么也没做,但它几乎立即刷新了console+页面。现在它不再刷新页面,仍然忽略serialize console.log tho。你能解释一下为什么我不应该使用return false,而应该使用prevent default@mccambridge吗?在这种情况下,它们具有相同的效果。但是,在重写默认行为时使用它是一种很好的做法。您可能希望函数的返回值为false,但仍然提交表单。你的情况不是这样,但学习标准是个好主意。有道理。我将使用你的版本。因为我使用带有把手的express作为引擎和一些基本逻辑,我真的希望保留把手。如果你使用它来阻止页面重新加载表单,它应该会起作用。onsubmit=function e{e.preventDefault…=>是的,它现在可以工作了,但这仅仅是因为它跳过了带有$form.serialize的console.log行。非常感谢,但是你知道这行有什么问题吗。请参阅我的第四次编辑:它没有跳过,jquery没有在那里定义,现在它可以了,它可以正常工作=>我非常感谢你的帮助,我看到了它是如何工作的在html中,它仍然忽略了第二个console.log和我的serialize。只将第一件事记录到控制台中,可能是把手有问题。。
document.querySelector('#specialform');
var form = document.getElementById('specialform');