在没有输入按钮的情况下将搜索输入传递给Javascript

时间:2016-06-06 18:08:36

标签: javascript html forms

我有以下html表单,我试图在不使用任何按钮的情况下提交给javascript。输入查询并按Enter键完成表单提交。

我收到错误" TypeError:undefined不是对象(评估' this.form.query')"。如果我删除' this.form.query'从onsubmit()开始,然后调用该函数。我究竟做错了什么?我该如何将查询传递给JS函数?

<form onsubmit="searchWiki(this.form.query)">
<input type="search" placeholder="Search Wikipedia" name="query" />
</form>

我的JS功能在

之下
function searchWiki(data) {
var script = document.createElement('script');
console.log(data);
script.src = '//en.wikipedia.org/w/api.php?action=opensearch&format=json&search=apple%20inc&callback=wikiData';
document.getElementsByTagName('head')[0].appendChild(script);
};

更新 感谢大家的帮助。以下是我更新的代码:

HTML

<form id="search">
    <input type="search" placeholder="Search Wikipedia" name="query" />
</form>

JS

function searchWiki(data) {
    let script = document.createElement('script');
    console.log(data);
    script.src = `//en.wikipedia.org/w/api.php?action=opensearch&format=json&search=${data}&callback=wikiData`;
    document.getElementsByTagName('head')[0].appendChild(script);
}

document.getElementById('search').addEventListener('submit', function(e) {
    e.preventDefault();
    searchWiki(encodeURIComponent(this.query.value));
})

4 个答案:

答案 0 :(得分:0)

这已经是表单了,所以this.form给出了undefined。

您需要直接传递输入:this.query或传递输入值:

<form onsubmit="searchWiki(this.query.value)">

答案 1 :(得分:0)

您可以在输入中添加id并使用document.getElementById

<form onsubmit="searchWiki(document.getElementById('query').value)">
<input type="search" placeholder="Search Wikipedia" id="query" name="query" />
</form>

答案 2 :(得分:0)

如果可以使用jQuery,我将如何做到这一点:

&#13;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <input type="search" placeholder="Search Wikipedia" name="query" />
</form>
&#13;
#include <stdio.h>
#include <iostream>
using namespace std;

// input function
void Input (float &x, float &y);

float a=1.0, b=1.0, result;
char operation;
char yesNO; 

int main ()

{
do {
    cout << "Programma wat optelt, aftrekt, vermedigvuldigd en deelt. \n\n";

    cout << "Geef een opdracht (eg. 1 + 2): \n";
    cin >> a >> operation >> b;

    Input (a,b);

    cout << "Het antwoord is: " << result << endl;
    system ("pause");
    return 0;
}
 while (yesNO == 'y');
void Input (float &x, float &y)
{
    a = x;
    b = y;

    switch (operation)
    {
        case '+':
            result = x + y;
            break;

        case '-':
            result = x - y;
            break;

        case '*':
            result = x * y;
            break;

        case '/':
            result = x / y;
            break;

        default:
            cout << "foutieve invoer: \n";
            cin >> a >> operation >> b;
            Input (a, b);
    }
  }
 }
&#13;
&#13;
&#13;

答案 3 :(得分:-1)

尽量不要使用&#39;这个&#39;在DOM中。