Динамический JavaScript - OnClick не виден - PullRequest
0 голосов
/ 09 февраля 2010

Я загружаю HTML & JS-код динамически из веб-сервиса. Я использую метод обновления прототипа:

 placeholder.update(result.Static.html); // which also include javascript code

Сразу после загрузки кода все работает нормально:

ProRegResetForm();
alert('reset done');

однако, от контроля, объявленного как

<a href="javascript://" onclick="javascript:ProRegResetForm();" class="au">Reset</a>

У меня ошибка: ProRegResetForm не определен.

Упрощенный тестовый код (который также не работает):

<script type="text/javascript">

    var defkeyword_ZipCode = 'Zip Code';

</script>
<a href="javascript://" onclick="alert(defkeyword_ZipCode);">test link</a>

Ответы [ 3 ]

0 голосов
/ 09 февраля 2010

Учитывая, что ваш «упрощенный тестовый код» не был выполнен, скорее всего, в другом месте вашего кода есть ошибка javascript. Код Javascript, следующий за исключением, не будет выполнен.

Пробовали ли вы проверить сценарий до создания фрагмента (как он отображается на клиенте) с помощью Firebug или панели инструментов разработчика IE?

0 голосов
/ 09 февраля 2010

У меня была похожая проблема, и я решил ее, разделив ответ HTML от JavaScript с помощью «^» и вставив их отдельно.

//=============================================================================
function injectJavascript(src)
    {
    var scripts = document.getElementById("scripts");
    var javascriptSrc = document.createElement("script");
    javascriptSrc.setAttribute("type", "text/javascript");
    javascriptSrc.setAttribute("language", "JavaScript1.2");
    javascriptSrc.innerHTML = src;
    scripts.appendChild(javascriptSrc);
    }
//=============================================================================
function insertHtmlAndScript(target)
    {
    if (req.readyState == 4) // 4 == "loaded"
        {
        if (req.status == 200) // 200 == "Ok"
            {
            var resp = req.responseText.split("^");
            div = document.getElementById(target);
            div.innerHTML = resp[0];
            injectJavascript(resp[1]);
            }
        else
            {
            alert("Could not retreive URL:\n" + req.statusText);
            }
        }
    }
//======================================================================

Единственная причина, по которой я могу думать, что это работает, в то время как ваша инъекция не работает, заключается в том, что интерпретация HTML и JavaScript имеет многопоточность, так что JavaScript не может связываться должным образом ... но это только предположение.

0 голосов
/ 09 февраля 2010

Правильно было написать код вроде:

<a href="javascript://" id="element">test link</a>
<script type="text/javascript">
    functoin somethingcomplex() {
bla bla bla
}

    $('element').onclick = function() { somethingcomplex(); }

</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...