为什么我们在JS中使用$(function(){})语法?

时间:2015-09-07 14:03:56

标签: javascript jquery javascript-events event-handling

当我使用此代码时,它将我的$ .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');
    });
});

我真的不明白为什么?

3 个答案:

答案 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(){})这两个函数将在加载整个页面时执行。