Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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 SQLite动态WHERE子句不起作用_Javascript_Jquery_Html_Sqlite_Jquery Mobile - Fatal编程技术网

Javascript SQLite动态WHERE子句不起作用

Javascript SQLite动态WHERE子句不起作用,javascript,jquery,html,sqlite,jquery-mobile,Javascript,Jquery,Html,Sqlite,Jquery Mobile,单击“搜索”按钮时,应显示一个表,其中包含包含所选listitem名称的所有记录,但由于某种原因,该表无法工作,因为该表根本不显示。有人知道如何解决这个问题吗 HTML <!DOCTYPE html> <html> <head> <title>World</title> <meta name="viewport" content="width=default-width; user-scalable=no, i

单击“搜索”按钮时,应显示一个表,其中包含包含所选listitem名称的所有记录,但由于某种原因,该表无法工作,因为该表根本不显示。有人知道如何解决这个问题吗

HTML

<!DOCTYPE html>
<html>

<head>
    <title>World</title>

    <meta name="viewport" content="width=default-width; user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1" />

    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css" />
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script>
</head>

<body onload="init()">
    <div data-role="page" id="myform">
        <div data-role="header">
            <h1>World</h1>
        </div>

        <div data-role="content">
            <form>
                <table cellpadding="2" cellspacing="2">
                    <tr>
                        <td>Continent</td>
                        <td>
                            <select id="continent" required>
                                <option value="Africa">Africa</option>
                                <option value="Antarctica">Antarctica</option>
                                <option value="Asia">Asia</option>
                                <option value="Europe">Europe</option>
                                <option value="North America">North America</option>
                                <option value="Oceania">Oceania</option>
                                <option value="South America">South America</option>
                            </select>
                        </td>
                    <td>
                        <input type="button" value="Search" class="btn-form" data-icon="search" onclick="search()">
                        </td>
                    </tr>
                </table>
            </form>

            <div id="result"></div>
    </div>
</body>

</html>

世界
世界
大陆
非洲
南极洲
亚洲
欧洲
北美
大洋洲
南美洲
JavaScript

var db = openDatabase('helloworld', '1.0', 'World', 5 * 1024 * 1024);

function init() {
    "use strict";

    db.transaction(function (tx) {
        tx.executeSql('DROP TABLE continents');
        tx.executeSql('CREATE TABLE IF NOT EXISTS continents(id INTEGER PRIMARY KEY AUTOINCREMENT, continent TEXT)');


        //Record 1
        tx.executeSql('INSERT INTO continents(continent) values("Africa")');
        tx.executeSql('INSERT INTO continents(continent) values("Antarctica")');
        tx.executeSql('INSERT INTO continents(continent) values("Asia")');
        tx.executeSql('INSERT INTO continents(continent) values("North America")');
        tx.executeSql('INSERT INTO continents(continent) values("Oceania")');
        tx.executeSql('INSERT INTO continents(continent) values("South America")');        
    });
}

function search(id) {
    "use strict";

    db.transaction(function (tx) {
        tx.executeSql('SELECT * FROM continents WHERE continent = ?', [continent], function (tx, results) {
            var n = results.rows.length;
            var s = '<h2>Results</h2>';
            s += '<table cellpadding="3" cellspacing="3" border="1">'; 
            s += '<tr><th>ID</th><th>Continent</th></tr>';
            for (var i = 0; i < n; i++) {
                var work = results.rows.item(i);
                s += '<tr>';
                s += '<td>' + work.id + '</td>';
                s += '<td>' + work.continent + '</td>';
                s += '</tr>';
            }
            s += '</table>';
            document.getElementById('result').innerHTML = s;
        });
    });
}
var db=openDatabase('helloworld','1.0','World',5*1024*1024);
函数init(){
“严格使用”;
数据库事务(功能(tx){
tx.executeSql('DROP TABLE continents');
tx.executeSql('CREATE TABLE IF NOT EXISTS contricents(id INTEGER主键自动递增,contricents TEXT));
//记录1
tx.executeSql('插入大陆(大陆)值(“非洲”));
tx.executeSql(“插入大陆(大陆)值(“南极洲”));
tx.executeSql(“插入大陆(大陆)值(“亚洲”));
tx.executeSql('插入大陆(大陆)值(“北美”));
tx.executeSql(“插入大陆(大陆)值(“大洋洲”));
tx.executeSql(“插入大陆(大陆)值(“南美洲”));
});
}
功能搜索(id){
“严格使用”;
数据库事务(功能(tx){
tx.executeSql('SELECT*FROM contricents其中contricents=?',[contricents],function(tx,results){
var n=results.rows.length;
var s=‘结果’;
s+='';
s+=‘IdContinental’;
对于(变量i=0;i
如前所述,您没有定义在where子句中使用的JavaScript变量
大陆
。另一点是,搜索函数希望接收一个参数(
id
),但在调用该函数时,您不会发送任何参数。然而,最后一个现在不重要了

一种可能的解决方法是,在执行查询之前,将所选选项保存在名为
contraction
的JavaScript变量中,这样就不必更改大量代码

var continent = $('#continent').find(":selected").text();
就像在这篇文章中:

您还必须再关闭一个


让我知道这是否有效。

那么问题出在哪里?您能否控制台.log并查看它是否包含预期的数据?还是您收到了错误?我看到
[大陆]
被传递到
tx.executeSql
,但我没有看到
大陆
被定义在哪里。是否要使用
id
作为占位符的值?否,
大陆
是在
创建表
命令中定义的。大陆
表是在数据库中创建的,但这与JavaScript中的
大陆
变量无关。如果将
console.log(contraction)
调用放在该函数中,它会说什么?@muistooshort您指的是
tx.executeSql('SELECT*FROM contractions WHERE contraction=?',[contraction],function(tx,results){
行吗?请记住,
continenet
表示用户从选择列表中选择的项。