没有加载javascript函数

时间:2014-07-03 12:55:49

标签: javascript jquery symfony

我的symfony 2项目中有这样的代码。

{% extends 'DomestosAdminBundle::layout.html.twig' %}
{% block title %}DomestosAdminBundle:Parent:edit{% endblock %}

{% block content %}
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script>
    $(function() {
      var availableTags = {{json|raw}};
      $( "#tags" ).autocomplete({
        source: availableTags
      });
    });
  </script>
  <script type="text/javascript">
    $(function() {
      function addSchool(value) {
        $.ajax({
          url: '{{path("parent/school/add",{"parent_id": parent.id})}}'
          data: {
            tags: value
          },
          success: function(){ alert("Hello world"); }
          error: function(){ alert("Chyba píčo"); }
        });
      }
    });
  </script>
  {{form_start(form)}}
    <div id="semeno">
      {% for school in parent.school %}
        {{school.name}} <a href="{{path('parent/school/delete', {'parent_id': parent.id, 'school_id' : school.id})}}"><i class="fa fa-times-circle fa-2x"></i></a>
      {% endfor %}
    </div>
    {{form_rest(form)}}
    <input id="tags" name="tags"> &nbsp;<a style="cursor: pointer;" onclick="addSchool($('#tags').val()); return false;"><i class="fa fa-plus"></i></a>
    <button type="submit" class="btn btn-success pull-right">Save</button>
  {{form_end(form)}}
{% endblock %}

第一个功能availableTags工作正常,但是firebug控制台抛出错误,它找不到addchool动作。我知道这是错误的放置,使用标签2次,但我迷失在这个JS中。

1 个答案:

答案 0 :(得分:0)

这是因为addSchool功能的可见性。它在$(function())内声明,因此在此块之外是不可见的。

请:

<script type="text/javascript">

function addSchool(value) {
            $.ajax({
                url: '{{path("parent/school/add", {"parent_id": parent.id})}}',
                data: {
                    tags: value
                },
                success: function(){ alert("Hello world"); },
                error: function(){ alert("Chyba píčo"); }
            });
        }

</script>

你的

<script type="text/javascript">
$(function() {
function addSchool(value) {
            $.ajax({
                url: '{{path("parent/school/add", {"parent_id": parent.id})}}'
                data: {
                    tags: value
                },
                success: function(){ alert("Hello world"); }
                error: function(){ alert("Chyba píčo"); }
            });
        }
    });

它基本上是相同的代码,但没有$(function())包装器,在这种情况下你不需要它,因为你只是声明了函数。

注意:在全局命名空间中声明函数可能被视为不良操作