2010-10-09 1 views
0

Я создаю сайт ASP.NET MVC, где мне нужен редактор тегов, аналогичный тому, который используется в Stack Overflow. Я уже рассмотрел, как выполнить необходимую автозаполнение с помощью jQuery UI, но у меня возникла проблема: , когда я помещаю скрипт во внешний файл .js, он не выполняет.Javascript не выполняется при размещении во внешнем файле сценария

Вот мой test.html:

<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Test</title> 
    <script src="http://jqueryui.com/jquery-1.4.2.js"></script> 
    <script src="http://jqueryui.com/ui/jquery.ui.core.js"></script> 
    <script src="http://jqueryui.com/ui/jquery.ui.widget.js"></script> 
    <script src="http://jqueryui.com/ui/jquery.ui.position.js"></script> 
    <script src="http://jqueryui.com/ui/jquery.ui.autocomplete.js"></script> 
    <script src="jquery.tagautocomplete.js"></script> 
    <script> 
    $(function() { bindAutoTagComplete('#birds'); }) 
    </script> 
</head> 
<body> 
    <label for="birds">Birds: </label> 
    <input id="birds" size="50" /> 
</body> 
</html> 

Вот jquery.tagautocomplete.js:

function bindAutoTagComplete(item, otherRootDomain) 
{ 
     function split(val) { 
      return val.split(/ \s*/); 
     } 
     function extractLast(term) { 
      return split(term).pop(); 
     } 

     $(item).autocomplete({ 
      source: function(request, response) { 
       $.getJSON('http://jqueryui.com/demos/autocomplete/search.php', { 
        term: extractLast(request.term) 
       }, response); 
      }, 
      search: function() { 
       // custom minLength 
       var term = extractLast(this.value); 
       if (term.length < 2) { 
        return false; 
       } 
      }, 
      focus: function() { 
       // prevent value inserted on focus 
       return false; 
      }, 
      select: function(event, ui) { 
       var terms = split(this.value); 
       // remove the current input 
       terms.pop(); 
       // add the selected item 
       terms.push(ui.item.value); 
       // add placeholder to get the comma-and-space at the end 
       terms.push(""); 
       this.value = terms.join(" "); 
       return false; 
      } 
     }); 
    } 

Как вы думаете, может быть причиной этой проблемы? Вероятно, у меня есть некоторые закрывающие скобки/скобки в файле .js ...

Заранее благодарен!

+0

Вы уверены, что сам файл включается? Попробуйте просто поместить 'alert (" test ")' в файл и посмотреть, если он срабатывает. –

+0

@ Ник OK, будет проверяться через секунду. Должен ли я помещать его после 'function bindAutoTagComplete (iteme, otherRootDomain) {' или раньше? ** ОБНОВЛЕНИЕ: ** Я пробовал в обоих направлениях; только поместив его перед тем, как декларация функции сработала. Это означает, что файл загружается, но по какой-то причине моя функция не выполняется. Что дает? Спасибо за вашу помощь. –

+0

@Maxim - в самом верху файла работает ... в любом месте базы действует. –

ответ

1

Необходимо прикрепить это событие после того, как страница будет готова. #birds не существует, когда он выполняется в настоящее время.

Что-то вроде

<script> 
$(document).ready(function(){ bindAutoTagComplete('#birds'); }); 

</script> 
+1

Это неверно, '$ (function() {' является ярлыком для '$ (document) .ready (function() {', поэтому он уже навещает это на 'document.ready'. –

+0

Это похоже на проблему Спасибо большое! –

+0

@ Ник работает для меня! –

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

  • Нет связанных вопросов^_^