События onClick не запускаются с помощью innerHTML

0

Привет, У меня проблема с событиями onclick, которые записываются с использованием innerHTML. Я попытался сделать это двумя способами, и оба не работают

функция, которую необходимо вызвать, - это

function loadnewsstory()
{
    alert("123456");
}

на данный момент он должен показать окно предупреждения с 123456, но он не стреляет.

Загрузка функции осуществляется следующим образом:

function newsstories()
{
    document.getElementById("activecontent").innerHTML = "<h1 class='newsheader'>Latest News</h1>";

    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("POST","test.com?uri=loadnews",false);
    xmlhttp.send();
    var newsreponse = JSON.parse(xmlhttp.responseText);

    var countstories = 0;
    for (var i = 0, len = newsreponse.length; i < len; ++i) {
     var news = newsreponse[i];
     if(i % 2 == 0){
       cssclass = "even";
     }
     else
     {
       cssclass = "odd";
     }

      //  alert(news.featured_image);
     document.getElementById("activecontent").innerHTML += "<div class='news " + cssclass + "'><div class='newstitle'><div class='newstitlecolor'><a href='#' onclick='loadnewsstory();'>" + news.post_title + "</a></div></div><div class='base' style='background: url('" + news.featured_image + "');'><img src='" + news.featured_image + "'  style='width:100%; height:100%;' id='news_"+ countstories +"'/></div></div>";


        document.getElementById("news_"+countstories).onclick = function(){ loadnewsstory();}


        countstories++;
    }
}

как вы видите, я также запустил document.getElementById("news_"+countstories).onclick = function(){ loadnewsstory();} потому что я читал, что события onclick не могут быть написаны javascript innerHTML, которые, как я знаю, я был в состоянии сделать это раньше. Если кто-то еще знает об исправлении этой проблемы, это было бы здорово. это для приложения iphone cordova

благодаря

РЕДАКТИРОВАТЬ

Я обнаружил, что это

document.getElementById("activecontent").innerHTML += "<div class='news " + cssclass + "'><a href='javascript:openextlink();'><img src='" + news.featured_image + "'  style='width:100%; height:100%;'/></a></div>";

работает, но, похоже, работает только в последней новостной новость, я что-то упускаю.

  • 0
    Почему НОЙ использует jQuery ??
  • 0
    У вашей ссылки нет идентификатора, соответствующего getElementById
Показать ещё 2 комментария
Теги:
onclick
cordova

3 ответа

0

это связано с тем, что z-index в моем css не работал, я исправил это, удалив z-index: -1, и теперь все работает отлично, интересно, что из-за ошибки css эта ошибка появилась зажечь

0

Прежде всего, добавление к innerHTML обычно очень плохое. Если вы запустите код как something.innerHTML += 'lots of html' в цикле, браузер должен обновить дерево DOM и повторно отобразить страницу на каждой итерации. Это может сильно замедлить работу. Вместо этого используйте буферную строку.

Я также подозреваю, что это могло вызвать проблемы с привязкой событий. Попробуйте добавить события после того, как все div были прикреплены к дереву. Код в этом случае будет примерно таким:

function newsstories()
{
    // Use a variable that would store the newly generated HTML:
    var html = "<h1 class='newsheader'>Latest News</h1>";

    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("POST","test.com?uri=loadnews",false);
    xmlhttp.send();
    var newsreponse = JSON.parse(xmlhttp.responseText);

    for (var i = 0, len = newsreponse.length; i < len; ++i) {
        var news = newsreponse[i];
        // Notice the 'var' keyword!
        if(i % 2 == 0){
            var cssclass = "even";
        } else {
            var cssclass = "odd";
        }

        // Append to our buffer variable
        html += "<div class='news " + cssclass + "'><div class='newstitle'><div class='newstitlecolor'><a href='#' onclick='loadnewsstory();'>" + news.post_title + "</a></div></div><div class='base' style='background: url('" + news.featured_image + "');'><img src='" + news.featured_image + "'  style='width:100%; height:100%;' id='news_"+ i +"'/></div></div>";
    }

    // Now that new html is ready, insert it into the tree
    // and attach events
    document.getElementById("activecontent").innerHTML = html;
    for (var i = 0, len = newsreponse.length; i < len; ++i) {
        var img = document.getElementById('news_'+i);
        if(img) img.addEventListener('click', loadnewsstory);
    }
}
  • 0
    Я начинаю думать, что проблема может быть связана с чем-то совершенно отдельным, например, с iOS, потому что даже если я сделал все, что вы сказали, он все еще не хочет работать. Я ничего не знаю, код мудрый не так, поэтому я почесал голову, проблема может быть iOS7
  • 0
    У меня только есть идея: что если мы попытаемся связать обработчик события mousedown ? Я читал, что click не работает в PhoneGap по умолчанию. Вы можете прочитать больше там .
Показать ещё 1 комментарий
0

Я подозреваю это, потому что ваш запрос пытается слишком быстро прочитать/проанализировать ответ с сервера:

xmlhttp.send();
var newsreponse = JSON.parse(xmlhttp.responseText);

Поскольку это запрос asyncronus (Ajax), вам нужно дать сценарию время ожидания ответа сервера. Вы делаете это, создавая обработчик событий, ожидающий ответа.

xmlhttp.onreadystatechange=function() { // checks if the state of the request has changed
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { // checks that the response is ready
        // code to handle the response here
        var newsreponse = JSON.parse(xmlhttp.responseText);
        // etc.
    }
}

Также обратите внимание, что вы должны создать этот обработчик перед вызовом xmlhttp.send();

  • 0
    изменение того, что вы предложили, только не загрузило xmlhttp
  • 0
    Кроме того, я не вижу причины для добавления этого кода, так как JSON возвращается нормально, и все остальное работает, только когда я хочу добавить ссылку на каждый из новостных статей
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню