我在每个页面上都有一个包含10-20个对象的列表来创建这些表单:
<div id="routeTable">
{% for route in route_list %}
<div id="routeDone">
<form class="doneForm" action="/route/complete/" method="post">
<input type="hidden" name="route_id" value="{{ route.route_id }}" />
<input type="hidden" name="next" value="{{ request.get_full_path }}" />
<input type="submit" value="Done" class="doneButton" />
</form>
</div>
{% endfor %}
</div>
我正在尝试向页面添加一些jquery以拦截通常的表单提交,而是使用ajax如下所示。 (我已经有了一个视图,它返回一个html块,它将被换出来用于上面的div#routeTable。问题是第4行“var route_ID ...”:
<script>
$(document).ready(function() {
$(".doneForm").submit(function() {
var route_id = $(this).attr('input[name=route_id]').val()
$.ajax({
type: "post",
url: "/route/complete/",
data: route_id,
success: function(data) {
$("#routeTable").html(data);
}
});
return false;
});
});
</script>
不幸的是,我无法将正确的route_id传递给名为route_id的js变量。我希望它需要使用'this'关键字,但我还没弄清楚究竟是怎么做的。
有关如何修复我的javascript的任何建议都将非常感谢。
答案 0 :(得分:1)
尝试更改
var route_id = $(this).attr('input[name=route_id]').val()
到
var route_id = $(this).find('input[name=route_id]').val()
原因是input[name=route_id]
不是属性,而是表示标记input
的选择器以及该标记[name=route_id]
上的属性。
您也可以
var route_id = $('input[name=route_id]',this).val()
答案 1 :(得分:0)
var route_id = $(this).attr('input[name=route_id]').val()
应该是这样的:
var route_id = $(this).find('input[name=route_id]').val()