Все это вызывается внутри расширения Chrome с использованием indexedDB.
Я не буду писать свой HTML, поскольку это простая разметка, однако, если это необходимо, скажите мне.
Код, о котором идет речь, находится в операторе IF внутри функции request.onsuccess:
if (getQueryVariable("deleteid") != "") {
removeFilter(id); // This
};
В операторе if я могу получить свой идентификатор непосредственно из URL-адреса, используя "getQueryVariable (" deleteid ")"и жесткое кодирование идентификатора" 2 "в моей функции removeFilter (2), однако, работает нормально, используя" var id = getQueryVariable ("deleteid"). toString (); в removeFilter (id) нет "дальнейших примеров в кодекомментарии.
//
//The code below works, except the functions in question inside the IF statements
//
document.addEventListener("DOMContentLoaded", function (event) {
if (!window.indexedDB) {
window.alert("Something went wrong");
};
var request = indexedDB.open('filterDB', 3);
request.onupgradeneeded = function (e) {
var db = e.target.result;
if (!db.objectStoreNames.contains('filters')) {
var os = db.createObjectStore('filters', { keyPath: "id", autoIncrement: true });
//create index for name
os.createIndex('name', 'name', { unique: false });
};
};
//success
request.onsuccess = function (e) {
console.log('Success: Opened DB');
db = e.target.result;
//Show Content
showFilters();
// The function removeFilter() is only supposed to be called once and the commented functions are just examples
if (getQueryVariable("deleteid") != "") { // the URL reads popup.html?deleteid=2
var id = getQueryVariable("deleteid").toString(); // id = 2
removeFilter(id); // calls the onsuccess function, but doesnt delete anything
//removeFilter(getQueryVariable("deleteid").toString()); // same deal
//removeFilter(2); // Deletes Item with id = 2, so the function works with a hardcoded ID
//alert(getQueryVariable("deleteid").toString()); // alerts id = 2
//alert(id); // alerts id = 2
window.location.href = "popup.html";
};
};
//Error
request.onerror = function (e) {
console.log('Error, Could not open DB');
};
document.getElementById("FilterAdd").onclick = function () {
addFilter();
showFilters()
document.getElementById("filtername").value = "";
document.getElementById("tags").value = "";
};
});
// My delete function
function removeFilter(id) {
var transaction = db.transaction(['filters'], 'readwrite');
var store = transaction.objectStore("filters");
var request = store.delete(id);
//success and error callbacks
request.onsuccess = function (e) {
db = e.target.result;
console.log("Filter " + id + " deleted");
};
request.onerror = function (e) {
alert("Sorry, the filter wasnt removed");
console.log('Error ', e.target.error.name);
};
};
// Getting the id from URL function
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) { return pair[1]; }
}
return (false);
}
Если я могу жестко закодировать "2" в функцию removeFilter (2), и это работает, не должна ли переменная var id = getQueryVariable ("deleteid"). ToString ();работать, так как он возвращает «2» внутри «alert (id)»?
Я довольно новичок в Javascript и уже некоторое время борюсь с этой проблемой
Извините, если этот вопрос уже был поднят, я попытался посмотреть, но ничего не нашел.