Подтвердить что ты не робот

Лучший способ выполнить js только на определенной странице

Мне было интересно, что было бы лучшим способом выполнить код java- script только на определенных страницах.

Предположим, что у нас есть веб-сайт на основе шаблонов, переписываем правило для набора ist, а jquery доступно и в основном выглядит следующим образом:

  <!DOCTYPE html>
  <html>
   <head>
    <script src="script.js"></script>
   </head>
   <body>
    ...
    include $content;
    ..
   </body>
</html>

Содержимое "информация" содержит кнопку, мы хотим, чтобы что-то произошло в клике, содержимое "alert" должно указывать в качестве сообщения, когда вы наводите текстовое поле.

Каков наилучший способ запуска этих действий, не запускаясь в ошибку, потому что объект не найден?

Вариант один: использование window.location.pathname

 $(document).ready(function() {
      if (window.location.pathname == '/info.php') {
          $("#button1").click(function(){'
            //do something
          })
      }else if(window.location.pathname == '/alert.php'){
           $("#mytextfield").hover(){
             alert('message');
           }
    }

Вариант второй: проверка наличия элементов

$(document).ready(function() {
  if ($("#button1").length > 0) {
      $("#button1").click(function(){'
        //do something
      })
  }else if ($("#mytextfield").length > 0){
       $("#mytextfield").hover(){
         alert('message');
       }
}

Вариант три: включить script в загруженный шаблон

//stands for itself

Это лучшее решение? Или мне нужно ладить с одним из этих решений?

Ваш опыт, использование или любые ссылки, связанные с этой темой, оценены.

//EDIT:

Возможно, я выбрал плохой пример, фактический код будет примерно таким:

    mCanvas = $("#jsonCanvas");
    mMyPicture = new myPicture (mCanvas);

где конструктор myPicture получает контекст элемента canvas и выдает ошибку, если mCanvas undefined.

4b9b3361

Ответ 1

Немного другой подход, чем проверка URL-адреса: вы можете группировать обработчики событий, специфичных для страницы, в одной функции, а затем в каждом include, иметь domready, который будет вызывать эти функции.

Например: в script.js у вас есть две функции (за пределами domready), а именно. onPage1Load() и onPage2Load().

В page1.php у вас есть $(document).ready(onPage1Load) и т.д. для других страниц. Это позволит убедиться, что незапланированные обработчики событий не зарегистрированы.

Ответ 2

Установите атрибут class в свой тег тела.

<body class="PageType">

И затем в script..

$(function(){
  if($('body').is('.PageType')){
    //add dynamic script tag  using createElement()
    OR
    //call specific functions
  }
});

Ответ 3

Я бы использовал оператор switch и переменную. (Я использую jQuery!)

var windowLoc = $(location).attr('pathname'); //jquery format to get window.location.pathname

switch(windowLoc){      
  case "/info.php":
    //code here
    break;
  case "/alert.php":
    //code here
    break;
}

//use windowLoc as necessary elsewhere

Это позволит вам изменить то, что "button" на основе страницы, на которой вы находитесь. Если я правильно понял ваш вопрос; это то, что я сделал бы. Кроме того, если бы я обслуживал большое количество javascript, я бы просто добавил новый JS файл полностью.

var windowLoc = $(location).attr('pathname'); //jquery format to get window.location.pathname

switch(windowLoc){      
  case "/info.php":
    var infoJS = document.createElement('script');
    infoJS.type = 'text/javascript';
    infoJS.src = 'location/to/my/info_file.js';
    $('body').append(infoJs);
    break;
  case "/alert.php":
    var alertJS = document.createElement('script');
    alertJS.type = 'text/javascript';
    alertJS.src = 'location/to/my/alert_file.js';
    $('body').append(alertJs);
    break;
}

Надеюсь, что это поможет -

Приветствия.

Ответ 4

Вы можете использовать Require js (RequireJS - это файл JavaScript и загрузчик модуля) и загружать script, если они нужны только. Ссылка http://requirejs.org/, я знаю, что использование js не так просто.