我的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"> <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中。
答案 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())
包装器,在这种情况下你不需要它,因为你只是声明了函数。
注意:在全局命名空间中声明函数可能被视为不良操作