从单独的.js文件中调用主页面中的jquery函数.

Mau*_*een 5 jquery function

这是我的HTML页面:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>

<script type="text/javascript" src="jquery-1.8.2.min.js"></script>

<script type="text/javascript" src="myscript.js"></script>

<script type="text/javascript">

$(document).ready(function() {
function closecontactform(){
alert("closing the form");
};
});
</script>
</head>
<body>
<p id="elementname">Click me to call function</p>
</body>
Run Code Online (Sandbox Code Playgroud)

这是在myscripts.js文件中:

$(document).ready(function() {
$('#elementname').click(function() {
alert("click detected");
closecontactform();
}); 
});
Run Code Online (Sandbox Code Playgroud)

我的实际页面比这复杂得多,并且包含了很多jquery,但这是仅显示必要代码的基本问题.我希望能够从单独的.js文件中调用函数,而该函数在主页面中定义.在这个基本的简单版本中,我尝试删除$(document).ready(function()...并且在这个简单的示例中有帮助但是我在更复杂的页面中需要该行,因为删除它似乎打破了我要去的其他一切上.

你会看到"点击检测到"被调用,但"关闭表单"却没有.

你能给我任何指示吗?

谢谢,

cha*_*tfl 13

你有一个范围问题.您不需要包含命名函数$(document).ready().

如果包含在ready其范围内,则由于函数内的闭合,仅在该就绪函数内可用.

例:

$(document).ready(function() {
    function doAlert() {
        alert('foo');
    } 
    /* can call function since scope in same parent function*/
    doAlert();
}); 
/* function not in scope, is undefined here*/
doAlert();
Run Code Online (Sandbox Code Playgroud)

重构所以函数是全局可用的,并且如果从任何地方调用它将起作用.将在以下两种情况下工作:

function doAlert() {
    alert('foo');
}

$(document).ready(function() {
    doAlert();
});
doAlert();
Run Code Online (Sandbox Code Playgroud)

进一步说明:

许多人担心必须包含使用jQuery选择器和方法的函数$(document).ready().外面的命名函数ready可以包含所有jQuery代码......但是......在DOM准备好确保html存在之后需要调用它们