javascript - 使用一个 JavaScript 函数和两种形式

标签 javascript html ajax forms

我有一个用于检查表单输入的 JavaScript 函数,该函数将 AJAX 请求发送到 PHP 脚本。这是 HTML:

<form method="post" id="textform35" action="insert_text.php">
    <textarea id="text" cols="80" rows="3" placeholder="forecast text"></textarea>
    <input type=hidden id="text_old" value="">
    <input type=hidden id="sin_type" value="short">
    <input type=hidden id="den" value="0">
    <input type=hidden id="grad" value="България-в">
    <input type=hidden id="span" value="1">
    <input type="button" name="Submit" value="Submit" onclick="validate_sendForm()">
</form>

<form method="post" id="textform70" action="insert_text.php">
    <textarea id="text" cols="80" rows="12" placeholder=" >> "></textarea>
    <input type=hidden id="text_old" value="">
    <input type=hidden id="sin_type" value="short">
    <input type=hidden id="den" value="0">
    <input type=hidden id="grad" value="България-в">
    <input type=hidden id="span" value="1">
    <input type="button" name="Submit" value="Запази" onclick="validate_sendForm()">
</form>

正如您所看到的,有两种表单具有相同的元素,但具有不同的id

函数validate_sendForm()如下:

function validate_sendForm() {
    var text=document.getElementById("text").value;
    var y=document.getElementById("text_old").value;

    if (text==y) {
        if (y=='') {
            alert("some text ");
            return false;
        } else {
            alert("another text ");
            return false;
        }
    } else {
        var city_id   = document.getElementById("grad").value;
        var fore_code = document.getElementById("sin_type").value;
        var date_for  = document.getElementById("den").value;
        var date_span = document.getElementById("span").value;

        var xhttp = new XMLHttpRequest();
        var params="grad="+city_id+"&den="+date_for+"&span="+date_span+"&sin_file="+fore_code+"&tekst="+text;
        xhttp.open("POST", "insert_text.php", true);
        xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhttp.setRequestHeader("Content-length", params.length);
        xhttp.setRequestHeader("Connection", "close");

        xhttp.onreadystatechange = function() {
            if (xhttp.readyState == 4 && xhttp.status == 200) {
                alert(xhttp.responseText);
            }
        }

        xhttp.send(params);
    }
};

如何在两种形式下使用该函数?现在它采用第一种形式的值,并且从不查看第二种形式。我想我必须使用“this”,但不知道在哪里或如何使用。请不要建议我使用 jQuery,因为我不能。

最佳答案

首先我建议你更改输入的idclass因为id必须是唯一的。

现在,在您的情况下,一个好的解决方案是将表单 id 作为参数传递给函数:

onclick="validate_sendForm('textform35')" , onclick="validate_sendForm('textform70')"

然后,在函数内选择它,获取表单输入。

function validate_sendForm(_id){

    var formEl = document.getElementById(_id);

    // if you changed the input's id to class..:
    var inptEl_textOld = formEl.querySelector("input.text_old");
    var inptEl_sinType = formEl.querySelector("input.sin_type");
    var inptEl_den     = formEl.querySelector("input.den");
    // ...
}
<小时/>

另一种方法是通过 this (而不是表单 id)到您的函数,它是 <input type="button" 的引用你点击了。

例如:onclick="validate_sendForm(this)"

然后获取您需要的元素浏览该元素的父元素:

function validate_sendForm(_btn){

    var formEl = _btn.parentElement.parentElement.querySelector("form");

    // ...
}

关于javascript - 使用一个 JavaScript 函数和两种形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35337242/

相关文章:

javascript - CakePHP 无法同时处理两个 Ajax 请求?

javascript - 我可以通过请求直接从操作创建者内部访问 redux 调度吗?

javascript - 表中自动刷新的问题

html - 将父元素居中,直到到达左上角,然后停止居中并显示滚动条?

jquery - 如果有子菜单,导航菜单应该向左移动

javascript - 在 Ajax 事件之后调用其余的 javascript

javascript - 根据选择下拉选项将输入字段更改为禁用或启用

jquery - 提交翻转按钮在 FF 和 IE 中不起作用

javascript - 重新创建 Ajax POST

asp.net - AJAX Post 请求超时并显示 502 - Azure 网站