В stackoverflow вопрос с javascript и «не работает» в нем обычно является отсутствующим пареном :) Однако я не нашел такого в вашем коде. Я вижу подозрительный синтаксис около
,[kw_id], << did we really mean an array here, or are we de-referencing something...
В любом случае, если это не ошибка, я бы начал с упрощения, а не с многоцелевого использования ваших функций.
function searchByKeywordId(kw_id, element) {
cleanSearch();
var books = new Array();
db.transaction(function (tx) {
tx.executeSql("SELECT b.BK_TITLE,b.BK_URL, b.BK_THUMBNAIL_URL FROM KEYWORDS k INNER JOIN CATALOG_ITEMS c on k.KW_ID = c.KW_ID INNER JOIN BOOKS b on c.BK_ID = b.BK_ID WHERE k.KW_ID = ? GROUP BY b.BK_TITLE,b.BK_URL",[kw_id], function (tx, results) {
if (results.rows.length > 0) {
var html = "";
for (var i = 0; i < results.rows.length; i++) {
var bookId = results.rows.item(i).BK_ID;
var bookUrl = results.rows.item(i).BK_URL;
var bookTitle = results.rows.item(i).BK_TITLE;
var bookThumbnailUrl = results.rows.item(i).BK_THUMBNAIL_URL;
var book = new Book(bookId,bookTitle,bookUrl,bookThumbnailUrl);
books.push(book);
} // end for loop
} // end if block
} // end execute callback
); // end executeSql call
} // end transaction function argument
); // end db.transaction call
return books;
}
Тогда где-то, что вы вызвали эту функцию, сделайте что-то вроде этого:
var html="";
for (i=0; i<books.length; i++) {
html += "<a href='" + books[i].url + "' title=\"" + books[i].title + "\" target='_new'><img src='" + books[i].thumbnailUrl + "'></a> ";
}
if (html == "") {
html = "No result...";
}
element.innerHTML = html; // consider using jQuery here for browser compatability reasons
Это упростит отладку вашего кода в firebug или чего-либо еще и будет более читабельным. Позже, если вам нужна производительность, вы можете попытаться рекомбинировать и использовать существующий цикл в качестве оптимизации ... Преждевременная оптимизация обычно является плохой идеей. Напишите понятный код, который работает. Даже если вы знаете, что вам следует оптимизировать его, включите его, а затем оптимизируйте после того, как он сработает (предпочтительно после того, как вы продемонстрировали, что вам действительно нужно оптимизировать его).
http://www.flounder.com/optimization.htm