2013-09-20 3 views
3

В моей _Layout.cshtml У меня есть следующие:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <title>Intranet Ads</title> 
     <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
     <meta name="viewport" content="width=device-width" /> 
     @Styles.Render("~/Content/css") 
     @Scripts.Render("~/bundles/modernizr") 
     <script type="text/javascript"> 
      function search() { 
       var searchVal = $('#txtSearchString').val(); 
       $('#adResults #summary').each(function() { 
        if (searchVal == '') { 
         $(this).parent().show(); 
        } else { 
         $(this).not(':contains(' + searchVal + ')').parent().hide(); 
        } 
       }); 
      } 

     function openEditAd(val) { 
      if (val != 'admin') { 
       $("#edit-content,#edit-background").toggleClass("active"); 
       $("#txtConfirmationEdit").text = ""; 
      } else { 
       $("#edit-content-admin,#edit-background-admin").toggleClass("active"); 
       $("#txtConfirmationEdit").text = ""; 
      } 
     } 

     function closeEditAd(permission) { 
      if (permission != 'admin') { 
       if ($("#txtConfirmationEdit").val().trim() != "") { 
        var url = '@Url.Action("Edit", new { id = "__id__" })'; 
        window.location.href = url.replace('__id__', $("#txtConfirmationEdit").val()); 
       } 

       $("#edit-content,#edit-background").toggleClass("active"); 
      } else { 
       if ($("#txtConfirmationAdmin").val().trim() != "") { 
        var url = '@Url.Action("Edit", new { id = "__id__" })'; 
        window.location.href = url.replace('__id__', $("#txtConfirmationAdmin").val()); 
       } 

       $("#edit-content-admin,#edit-background-admin").toggleClass("active"); 
      } 
     } 

     $(document).ready(function() { 
      // Handler for .ready() called. 
      console.log("hi"); 
     }); 


    </script> 
</head> 
<body> 
... 
    @Scripts.Render("~/bundles/jquery") 
    @RenderSection("scripts", required: false) 
</body> 

Я просто добавил:

 $(document).ready(function() { 
      // Handler for .ready() called. 
      console.log("hi"); 
     }); 

Для конец, как я пытаюсь реализовать datepicker, но я получаю

JavaScript runtime error: '$' is undefined

Как вы можете видеть в моих других функциях, я использую команды jQuery ... В чем причина этого?

я получал ту же самую ошибку, когда я имел в а:

$(document).ready(
    function() { 
     $('.datepicker').datepicker({ 
      changeMonth: true, 
      changeYear: true, 
      minDate: "-99Y", 
      dateFormat: "dd/mm/yyyy" 
     }); 
    }); 

ответ

5

Вы должны поставить ссылку JQuery первым, в верхней части страницы. Браузеры загружают сценарии сценариев синхронно, поэтому, если вы попытаетесь ссылаться на $ JQuery перед загрузкой источника JQuery, вы получите сообщение об ошибке «undefined».

На самом деле, поскольку теги скриптов блокируют остальную часть страницы от загрузки, лучше бы вместо этого поместить ваши другие теги скрипта внизу, под ссылкой JQuery. Это позволяет браузеру сначала загружать и отображать разметку страницы, прежде чем загружать скрипты. (Это может создать впечатление более быстрой загрузки страницы.)

+0

Как я могу сказать? Я использую шаблон ASP MVC 4. Я не вижу тег сценария, как на обычных веб-страницах. – webdad3

+2

Ну, тогда разместите свой скрипт после '@ Scripts.Render (" ~/bundles/jquery ")' в теле – sbugert

+0

hmmm ... Это не сработало. У меня такая же ошибка. В окне вывода я вижу следующее: 0x800a139e - ошибка времени выполнения JavaScript: SyntaxError Исключение было выбрано в строке 5303, столбец 7 в http: // localhost: 6281/Scripts/jquery-1.8.2.js – webdad3

1

Я столкнулся с той же проблемой. Open Views \ Shared_Layout.cshtml и переместить предложения последующей регистрацией сценария из нижней секции корпуса, в головной части:

@ Scripts.Render ("~/расслоения/JQuery")

@Scripts. Render ("~/bundles/bootstrap")

Смежные вопросы