Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.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 我怎样才能保留这一点;onclick";避免发生不止一次?_Javascript_Html_Onclick - Fatal编程技术网

Javascript 我怎样才能保留这一点;onclick";避免发生不止一次?

Javascript 我怎样才能保留这一点;onclick";避免发生不止一次?,javascript,html,onclick,Javascript,Html,Onclick,我试图有一个按钮,当点击时,会打开一个区域来输入消息。我在HTML中使用“onclick”,我希望它只能单击一次。我不想让它继续制造更多的文本,你点击它的次数越多 在调用函数的onclick之后有一个this.onclick=“null”。在我添加提交按钮之前,这一直在工作 因此,该代码起作用: HTML: 但是,当我保持HTML不变并向javascript添加submit按钮时,如下所示: function createMessage() { var form = document.c

我试图有一个按钮,当点击时,会打开一个区域来输入消息。我在HTML中使用“onclick”,我希望它只能单击一次。我不想让它继续制造更多的文本,你点击它的次数越多

在调用函数的onclick之后有一个this.onclick=“null”。在我添加提交按钮之前,这一直在工作

因此,该代码起作用:

HTML:

但是,当我保持HTML不变并向javascript添加submit按钮时,如下所示:

function createMessage() {
    var form = document.createElement("form");
    form.name = "form_input";
    form.method = "POST";
    form.action = "messages.php";
    container.appendChild(form);

    var textarea = document.createElement("textarea");
    textarea.name = "message_input";
    textarea.cols = 84; 
    textarea.rows = 16; 
    textarea.id = "message_input"; 
    container.appendChild(textarea);

    var submit = document.createElement("button");
    submit.innerHTML = 'Send';
    submit.id = 'send_message';
    container.appendChild(submit); 
    submit.onClick(messageAjax());
}; 
它又开始复制了。有没有办法阻止这种事情发生


谢谢你的帮助

这是因为您的代码包含错误:

submit.onClick(messageAjax());
属性为
onclick
,小写
onClick
不存在并抛出错误。这将防止按钮清除自己的
onclick
,因为错误会导致脚本停止

我不完全确定上面这一行应该是什么。它似乎在调用
messageAjax
,然后立即将该函数的参数传递给
submit.onClick
。。。你是说这个吗

submit.onclick = messageAjax;
也许:

(function() {

    var open = false;

    function createMessage() {

        if( open ) return;

        var form = document.createElement("form");
        form.name = "form_input";
        form.method = "POST";
        form.action = "messages.php";
        container.appendChild(form);

        var textarea = document.createElement("textarea");
        textarea.name = "message_input";
        textarea.cols = 84; 
        textarea.rows = 16; 
        textarea.id = "message_input"; 
        container.appendChild(textarea);

        var submit = document.createElement("button");
        submit.innerHTML = 'Send';
        submit.id = 'send_message';
        container.appendChild(submit); 
        submit.onClick(messageAjax());

        open = true;
    };

})();

闭包避免了与window.open()的名称冲突。您可以对其进行不同的命名,但这只是为了让您了解它。

在再次添加之前,您是否验证onclick()事件是否已经设置过一次?为什么不在添加之前检查textarea是否已经存在?你永远不会得到多个。是的,当我刚刚完全摆脱onclick时,这是有效的,但是当单击submit按钮时,我应该怎么做才能让messageAjax运行呢?这正是我建议你应该用它替换的行。
submit.onclick = messageAjax;
(function() {

    var open = false;

    function createMessage() {

        if( open ) return;

        var form = document.createElement("form");
        form.name = "form_input";
        form.method = "POST";
        form.action = "messages.php";
        container.appendChild(form);

        var textarea = document.createElement("textarea");
        textarea.name = "message_input";
        textarea.cols = 84; 
        textarea.rows = 16; 
        textarea.id = "message_input"; 
        container.appendChild(textarea);

        var submit = document.createElement("button");
        submit.innerHTML = 'Send';
        submit.id = 'send_message';
        container.appendChild(submit); 
        submit.onClick(messageAjax());

        open = true;
    };

})();