Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript object.onsubmit事件未激活_Javascript_Node.js_Express_Quill - Fatal编程技术网

Javascript object.onsubmit事件未激活

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

首先是我的代码,全部在一个.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>
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');