Атрибут href изменения Jquery работает, только когда я добавляю функцию alert () - PullRequest
1 голос
/ 21 июля 2011

Я использую jquery для загрузки боковой панели на каждую из моих страниц, боковая панель содержит список названий историй, дату и тип контента (история, статья, новости и т. Д.), Который помещен в неупорядоченный список,Когда каждая страница загружается, я использую функцию jquery .load (), чтобы загрузить информацию о боковой панели в неупорядоченный список текущей страницы, как только загружена информация о боковой панели, я использую другой скрипт, который устанавливает #ref для текущей истории в боковой панели.Проблема в том, что фрагмент кода, который устанавливает для href значение #, работает только в том случае, если я поместил предупреждение прямо перед функцией.

Вот поток:

пользователь нажимает на историю (позволяетназывать историю ничем.1017 * sidebar.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
</head>

<body>  

    <ul>

        <li>
            <div class="catDate">
                <p> Nothing </p>
                <time pubdate="pubdate"> 2011-07-19 </time>
            </div>

            <div class="storyTitle">
                <a id="nothing" href="stories/2011/07/19/nothing.html"> Nothing Here, Yet. </a>
            </div>
        </li>

    </ul>

</body>

</html>

и, наконец, скрипт для отключения ссылки:

disableLink.js

$(document).ready(function() {
    var fullPath = window.location.pathname;
    var pageName = fullPath.substring(fullPath.lastIndexOf('/') + 1).replace('.html', '');
    $('#' + pageName).attr('href', '#');
});

Все это работает только потому, что я добавляю предупреждение в disableLink.js прямо перед модификацией href, например так:

$(document).ready(function() {
    var fullPath = window.location.pathname;
    var pageName = fullPath.substring(fullPath.lastIndexOf('/') + 1).replace('.html', '');
    alert('now it will work');
    $('#' + pageName).attr('href', '#');
});

В чем здесь проблема, почему это работает, только если я добавляю предупреждение?

1 Ответ

3 голосов
/ 21 июля 2011

Причина в том, что $("ul").load("...") занимает некоторое время для загрузки.

Вы можете назначить ему функцию обратного вызова, чтобы следующий фрагмент кода выполнялся только после его завершения

$("ul").load("../../../../sidebar.html ul",function () {
   var fullPath = window.location.pathname;
   var pageName = fullPath.substring(fullPath.lastIndexOf('/') + 1).replace('.html', '');
   $('#' + pageName).attr('href', '#');
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...