当我使用此代码时,它将我的$ .post()绑定到表单并阻止页面重新加载以提交它:
$("#analyze_audio").submit(function (e) {
debugger;
e.preventDefault();
var url = "/analyze_audio";
var dataToSend = {"analyze_audio": "analyze_audio"};
var callback = function (data) {
debugger;
document.getElementById("audioresponse").innerHTML = (data);
};
$.post(url, dataToSend, callback, 'html');
});
但是它不会触发我在其中使用的调试器,因此它不会正确地将事件绑定到我的函数。但是当我使用这个代码片段时,它完美无缺:
$(function() {
$("#analyze_audio").submit(function (e) {
debugger;
e.preventDefault();
var url = "/analyze_audio";
var dataToSend = {"analyze_audio": "analyze_audio"};
var callback = function (data) {
debugger;
document.getElementById("audioresponse").innerHTML = (data);
};
$.post(url, dataToSend, callback, 'html');
});
});
我真的不明白为什么?
答案 0 :(得分:6)
当你正在使用jQuery(你显然是这样)时,在$( )
中包装一个函数会使它成为一个函数,当" DOM准备好&#时,库会调用它34;从浏览器收到事件。因此,它会延迟代码的执行,直到完全构建DOM。这使你的代码工作,因为它确保了具有id" analyze_audio"的元素。在场。
$( )
没有语法上的特殊之处 - 它只是一个简单的函数调用,而是一个名为$
的函数(它是jQuery库的主要入口点)
您可能会看到执行类似操作的代码:
$(document).ready(function() { ... });
这完全相同(并且也是一个jQuery习语)。除非您喜欢输入额外的字符,否则没有理由使用该表格。
答案 1 :(得分:3)
$(function(){});只是document.ready的快捷方式。它会像这样工作:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Holo_Light);
getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
setCancelable(false);
}
答案 2 :(得分:1)
将事件绑定到表单#analyze_audio时,它尚未出现在DOM中。如果你把你的脚本放在带有表单的html之后,那么它就可以了。或者您可以使用$(document).ready()来添加绑定,或只使用$(function(){})这两个函数将在加载整个页面时执行。