当它在外部文件中时,Flask应用程序不执行javascript
Flask app not executing javascript when it's in an external file
我有包含我的CSS和JS的HTML文件。当创建我的flask应用程序时,我决定将CSS和JS分开,在一个静态目录中单独存放文件。
当我把所有的东西都放在一个HTML文件中时,一切都按预期工作,但是当CSS和JS在不同的文件中时,JS的部分不会执行。
这是我在HTML文件中的导入:
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript" src="{{ url_for('static', filename='scripts/main.js') }}"></script>
<link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.4.2/pure-min.css">
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
</head>
这是独立JS文件的内容:
$('#user_button').click(function(event) {
$("#user_id").html($('option:selected').html());
$('.button_div').show();
});
var prodData = [];
var boughtProds = [];
$('.prod_button').click(function(event) {
if (boughtProds.indexOf($(this).data('name')) == -1) {
prodData.push({
name: $(this).data('name'),
price: $(this).data('price'),
quantity: 1,
});
boughtProds.push($(this).data('name'));
} else {
prodData[boughtProds.indexOf($(this).data('name'))].quantity = prodData[boughtProds.indexOf($(this).data('name'))].quantity + 1;
}
var total = 0;
for (var x in prodData) total += prodData[x].price * prodData[x].quantity
total = Math.round(total * 100) / 100
var subtotal = '<tr><td></td><td>Subtotal</td><td>$' + total + '</td></tr>';
var allProds = '';
$.each(prodData, function(k, v) {
allProds = allProds + '<tr><td>' + v.name + '</td><td>' + v.quantity + 'x</td><td>@ $' + v.price + ' each</td></tr>'n';
});
$('.table_contents > tbody').html(allProds);
$('.table_contents > tfoot').html(subtotal);
});
$(document).ready(
function() {
$('.button_div').hide();
})
奇怪的是,这个函数在文档加载时正常工作:
$(document).ready(
function() {
$('.button_div').hide();
})
和这个函数不工作:
$('#user_button').click(function(event) {
$("#user_id").html($('option:selected').html());
$('.button_div').show();
});
但更奇怪的是,当所有内容都在一个HTML文件中时,所有内容都可以正常工作。
任何想法吗?
您要么需要将<script type="text/javascript" src="{{ url_for('static', filename='scripts/main.js') }}"></script>
移到<head>
标签之外(例如,移到<body>
的末尾),要么需要将$('#user_button').click(...);
放在$(document).ready(...);
中。
发生的事情是,你的浏览器开始加载你的外部脚本文件,因为它处理你的<head>
标签。一旦加载文件,浏览器就执行它,将单击事件绑定到#user_button
。这发生在它处理<body>
标记之前,因此#user_button
还不是DOM的一部分。
如果你试图检查$('#user_button')
,你会看到它是空的。
console.log($('#user_button'));
这个输出[]
我也遇到过类似的问题。当检查网络时,静态js正在从缓存加载。当我关闭缓存时,它开始工作了。因此,您需要在开发期间重新启动调试服务器或关闭缓存。
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 让python通过浏览器与本地Flask应用程序对话
- 如何使用Python Flask应用程序在D3JS图表中动态加载JSON数据
- Python Flask 应用程序,AJAX 帖子收到 400 个错误请求
- 尝试将Python/flask应用程序部署到Heroku时,未能绑定到$PORT
- Paypal集成到Flask应用程序
- Python flask web应用程序赢得't获取用户输入
- 在我的Flask应用程序中嵌入Bash shell
- Ng-repeat在Flask应用程序中没有显示我的项目
- 当它在外部文件中时,Flask应用程序不执行javascript
- 使用python-flask应用程序的heroku上没有显示高图
- Dropzone't上传到Flask应用程序后重定向