Я пытаюсь получить данные из таблицы базы данных sqlite для подачи в мой список раскрывающегося меню. Смотрите мои мысли ниже. Проблема в том, что я не знаю, как совместить JS-функцию с HTML-частью.
HTML.html
<label for = "name"><b>Activity Name:/b></label>
<select name = "activity" id = "activity" required>
<option value = "">--Select--</option>
getActivity()
</select>
JS.js
function getActivity(tx) {
tx.executeSql('SELECT * FROM tblactivity', [], queryActivity, errorHandler);
function queryActivity(tx, results) {
var len = results.rows.length;
for (var i = 0; i < len; i++) {
var SelectActivity +='<option value = "' + results.rows.item(i).activityID +'">'+ results.rows.item(i).ActivityName +'</Option>';
}
//SelectActivity + = "</Option";
document.getElementById("activity").innerHTML =SelectActivity;
}}
В качестве альтернативы в HTML.html, включая функцию, например
<label for = "name"><b>Activity Name:/b></label>
<select name = "activity" id = "activity" required>
<script>
function getActivity(tx) {
tx.executeSql('SELECT * FROM tblactivity', [], queryActivity, errorHandler);
function queryActivity(tx, results) {
var len = results.rows.length;
for (var i = 0; i < len; i++) {
var SelectActivity +='<option value = "' + results.rows.item(i).activityID +'">'+ results.rows.item(i).ActivityName +'</Option>';
}
//SelectActivity + = "</Option";
document.getElementById("activity").innerHTML =SelectActivity;
}}
</script>
</select>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы хотите заполнить параметры при загрузке, я бы рекомендовал обернуть ваши js в
$(document).ready(function() {
//your function
});
Таким образом, он будет работать после загрузки HTML, и вам не нужно ничего делать на стороне HTML (это означает, что вы должны удалить вызов своей функции).
EDIT: это решение JQuery, если вы хотите использовать чистый подход JS:
window.onload = function() {
//your function
};
Имейте в виду, что этот загрузит все перед запуском, например изображения и другие медиа; при более медленных соединениях пользователи могут видеть пустой выбор перед загрузкой.
ИЗМЕНИТЬ (после комментариев): Пожалуйста, проверьте эту скрипку: https://jsfiddle.net/chn1oL8m/5/ Думаю, теперь я понял вашу проблему, и это поможет вам, просто нужно использовать запрос вместо случайных значений (очевидно, у меня нет доступа к БД =])
Привет, @mountain, мне что-то не хватает, но если это не то, что вы ищете, я не понял, что это такое. Не могли бы вы объяснить это по-другому, может быть, я смогу вам помочь.
Ваша попытка не предполагает реализации решения. И JS, и HTML не работают, это просто руководство по реализации.
Я снова отредактировал ответ, надеюсь, теперь он у вас заработает!
Посмотрел, все равно логин плохой. Решение должно начинаться с функции getActivity (tx) {tx.executeSql ('SELECT * FROM tblactivity', [], queryActivity, errorHandler); функция queryActivity (tx, results) {var len = results.rows.length; for (var i = 0; i <len; i ++) {var activity + = '<option value = "' + results.rows.item (i) .activityID + '">' + results.rows.item (i) .ActivityName + '</Option>'; }}} Если я получу хотя бы часть JS
window.onload = function () {db.transaction (function (tx) {Squery = 'SELECT * FROM tblactivity'; tx.executeSql (Squery, null, function (tx, results) {var select = document.getElementById ('activity '); var len = results.rows.length; for (var i = 0; i <len; i ++) {row = results.rows.item (i); var ID = row [' activityID ']; var Name = row ['ActivityName']; var opt = document.createElement ('option'); opt.value = ID; opt.innerHTML = Name; select.appendChild (opt);}});}); };
все еще не могу заставить его работать. Посмотрите комментарий выше и посмотрите, что мы можем улучшить. В вашем jsfiddle есть пустой список выбора.
Я уже включил функции загрузки в расширенном коде (оставленный код). Вопрос ясен в том, что я ищу, но спасибо!