Скрипт не работает при

#javascript

#javascript

Вопрос:

Я проверил скрипт. он работает, но за пределами . Я не силен в скрипте. возможно, это простая проблема.

 <head>
<script src="http://code.jquery.com/jquery-1.5.js" type="text/javascript"></script>
<script src="http://0rochymugen.ucoz.com/scriptbestsite.js" type="text/javascript"></script>        
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
  

в основном скрипт просто показывает

при наведении курсора мыши на изображение.

 $('#img1').mouseover(function () {
$('#p1').show("slow");
});

$("#p1").hover(function () {
$("#p1").hide("slow");
});
  

когда я помещаю скрипт в head. просто не работает.

Комментарии:

1. Как это не работает? Что не работает? Пожалуйста, добавьте больше деталей

2. Это должно сработать, кажется, в этом нет ничего плохого. Добавьте больше деталей. Кстати, заголовок content-type должен быть сверху

3. Возможно, вам следует обернуть код в 0rochymugen.ucoz.com/scriptbestsite.js в $(document).ready(function(){ ... }); в противном случае он может быть выполнен до полной загрузки DOM?

4. @Pekka: Существует ли определенный порядок расположения элементов в head? Я всегда задавался вопросом об этом

5. @qwertymk реального определенного порядка не существует, но спецификация набора символов должна быть первой, потому что это может вызвать изменения в документе (символы отображаются по-разному)

Ответ №1:

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

Это одна из причин, по которой рекомендуется размещать ссылки на файлы javascript внизу страницы.

Еще одна хорошая практика — запускать ваш только после завершения загрузки документа, в jQuery это обычно выполняется с использованием следующего синтаксиса:

 $(document).ready(function(){
   // Your javascript
}
  

Комментарии:

1. Да, попробуйте поместить свои <script> теги прямо под закрывающим </body> тегом.

2. Я понимаю, но тогда для меня нет другой возможности? на самом деле я бы хотел, чтобы моя страница проверялась как «переданная» из валидатора.

3. @A3R — Смотрите мое обновление. Вы можете дождаться загрузки документа, прежде чем запускать свой javascript.

4. @A3R — Я опубликовал решение, которому не нужно изменять ваш файл .js

Ответ №2:

Я думаю, что ваш код не работает, потому что вы не запускаете его, когда документ готов:

 $(document).ready(function(){

  $('#img1').mouseover(function () {
  $('#p1').show("slow");
  });

  $("#p1").hover(function () {
  $("#p1").hide("slow");
  });

  $("#img2").mouseover(function () {
  $('#p2').show("slow");
  });

  $("#p2").hover(function () {
  $("#p2").hide("slow");
  });

  $("#img3").mouseover(function () {
  $('#p3').show("slow");
  });

  $("#p3").hover(function () {
  $("#p3").hide("slow");
  });

  $("#img4").mouseover(function () {
  $('#p4').show("slow");
  });

  $("#p4").hover(function () {
  $("#p4").hide("slow");
  });

  $("#img5").mouseover(function () {
  $('#p5').show("slow");
  });

  $("#p5").hover(function () {
  $("#p5").hide("slow");
  });
});
  

Также вы можете передать две функции вашему обработчику наведения для обработки событий наведения курсора мыши и вывода курсора мыши. Я думаю, это немного сократит ваш код. 😉

Ответ №3:

Проблема в том, что элементы, на которые вы ссылаетесь, еще не существуют.

Чтобы убедиться, что они существуют, прежде чем использовать их, вы должны поместить связанный с ними код внутрь $(document).ready . Итак, у вас есть:

     $(document).ready(function(){ //This ensures DOM elements are loaded
      $('#img1').mouseover(function () {
        $('#p1').show("slow");
      });

      $("#p1").hover(function () {
        $("#p1").hide("slow");
      });
    });
  

Но, если вы не можете изменить этот js-файл, чтобы добавить document.ready, вы могли бы загрузить скрипт динамически, следующим образом:

 <head>
  ...
  <script type="text/javascript">
     $(document).ready(function(){
        $.getScript("http://0rochymugen.ucoz.com/scriptbestsite.js");
     });
  </script>
  ...
</head>
  

Для js-скриптов (в целом) необязательно находиться в head разделе, но, ИМХО, это хорошая практика. Однако другие пользователи предпочитают размещать его внизу страницы по соображениям производительности.
Надеюсь, это поможет.

Комментарии:

1. да, приятно это знать. внизу страницы это нехорошо. если вы хотите, чтобы вас приняли за валидатора 😉 . tnx.