Вызов функции JavaScript с различными параметрами, в зависимости от того, на какой странице я нахожусь - PullRequest
0 голосов
/ 25 октября 2010

Я пытаюсь научиться чему-то javascript / jQuery, и я действительно борюсь с этим.Это в основном вопрос структуры - как сделать все как можно лучше.

У меня есть эта функция, которая случайным образом выбирает элемент списка из одного из трех неупорядоченных списков (где все элементы списка были скрыты) и показывает это.В зависимости от того, на какой странице я сейчас работаю, я бы хотел выбрать элемент списка из одного списка в частности.Все мои списки «помечены» идентификатором, чтобы сделать их уникальными.

Я мог бы передать аргумент своей функции рандомизации с идентификатором списка по своему выбору, чтобы он только выбирал элемент из этого конкретного списка,Однако это будет означать, что мне придется разместить встроенные сценарии в html (один тег сценария с вызовом пользовательской функции для каждой страницы), и, как я слышал, встроенные сценарии могут блокировать рендеринг страницы.И это было бы плохо, потому что я забочусь о производительности.Другим способом может быть множество предложений if / else, таких как «if body имеет класс the_classname-> randomize из списка с идентификатором the_id».Это, однако, означало бы, что сценарию придется выполнять множество ненужных запросов в DOM.

Не знаю, есть ли термин для того, о чем я говорю.Возможно, что-то вроде «условных вызовов функций» или «вызовов функций на основе страниц».

Как бы вы решили эту проблему?Я знаю свои CSS и HTML, но я новичок в javascripting.Просто пытаюсь поступить правильно ...

Ответы [ 5 ]

1 голос
/ 25 октября 2010

Самый лучший способ сделать это - изучить URL (без обхода DOM, без дополнительных внешних скриптов, так что это быстро):

var path = window.location.pathname;
if (path.indexOf('/a_unique_url') !== -1) {
    // do code for the page 'a_unique_url';
} else if (path.indexOf('/another_unique_url') !== -1) {
    // do code for the page 'another_unique_url';
} else {
    // do default action, because none of the above were found.
}

Немного более многословно с вашей стороны, но быстрее, если у вас много уникальных операций, будет использование оператора switch и полного пути, например:

var path = window.location.pathname;
switch(path) {
    case '/full/path/after/domain.html':
        // do code for the page '/full/path/after/domain.html';
        break;
    case '/some/other/path.html':
        // do code for the page '/some/other/path.html';
        break;
    case '/yet/another/path.html':
        // do code for the page '/yet/another/path.html';
        break;
    default:
        // do default action, because none of the above were found.
        break;
}

Хотя, если у вас есть доступ к серверным сценариям, существуют более эффективные методы для таких операций.

1 голос
/ 25 октября 2010

Один из способов - создать файл javascript, который вы включите в заголовок всех ваших страниц. Файл javascript будет содержать вашу функцию, которая принимает идентификатор страницы и возвращает элемент списка на основе страницы

function getListItem(pageId) {
    switch (pageId) {
       ...
    }
}

Назначьте атрибут ID для тега BODY каждой страницы, соответствующий идентификатору страницы в вашей функции javascript:

<body id="home-page">

Затем, при загрузке страницы, вы можете передать значение идентификатора вашей функции, используя jQuery:

<script type="text/javascript">
    $(function() {
        var listItem = getListItem($('body').attr["ID"]);
    } );
</script>

Это передаст "домашнюю страницу" вашей функции javascript и вернет элемент списка, определенный логикой внутри вашей функции javascript.

0 голосов
/ 25 октября 2010

Друг, я не совсем понимаю, что вы хотите, но я постараюсь помочь:

встроенный javascript заблокирует вашу страницу, если вы поместите их один в середине кода, но выможет сказать им, чтобы они выполнялись только тогда, когда страница была загружена с этим кодом:

window.onload = function (){
  //call your function with the desired parameter
}

Так что, когда ваша страница загружается, будет выполняться функция window.onload.

0 голосов
/ 25 октября 2010

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

Возможно, вы даже захотите посмотреть асинхронную загрузку скрипта.

0 голосов
/ 25 октября 2010

Добавьте его со стороны сервера во время выполнения: Метод Page.RegisterClientScriptBlock


Настройте его с помощью свойства из кода;

function myFunction() {
        var theParameter = '<%# parameterName>';
        // do something
    }
...