2

第一次问题......我页面上的这个链接

<a onclick="$('#mainbody').load('pages/login.php', tester());">Login</a>

生成这个表格

<form id="form">
    <b>Email Address:</b> <input type="email" name="usrEmail" placeholder="email address" required><br />
    <b>Password:</b> <input type="password" name="usrPass" placeholder="password" required><br />
    <input type="submit" value="Log in">
</form>

我的 .js 包含这个;

function tester(){
    $("#form").submit(function() {
        alert('Handler called.');
        return false;
    }); 
}

...提交表单时没有任何反应。但是,如果我将链接更改为

<a onclick="$('#mainbody').load('pages/login.php', function(){$( '#form' ).submit(function() { alert('Handler called.'); return false;});});">Login</a>

...这完美。从功能上讲,我看不出调用命名函数或在回调本身中定义之间有什么区别,但显然浏览器可以!我究竟做错了什么?是语法吗?定时?或者 - 我仍然在使用 jQuery 找到自己的方式 - 是不是因为即使我正在调用一个引用 #form AFTER 的事件处理程序,但首先创建函数的事实忽略了它?

4

3 回答 3

4

您将调用函数的结果绑定tester为回调.load(这没什么)。改为这样做:

$("#mainbody").load('pages/login.php', tester);

即使用函数作为回调。

于 2013-02-12T00:23:25.600 回答
0

是不是因为即使我调用了一个引用#form AFTER 的事件处理程序,它仍然存在

是的。您应该查看 jQuery 委托方法。

如果你说

$("body").delegate("form","submit",function(){
    alert("handeled");
});

它将在从不同来源加载后工作。

于 2013-02-12T00:25:02.470 回答
0

由于表单元素不在初始 DOM 中,因此您需要

  • 在回调时重新附加它,在加载回调时调用你的函数

  • 或让它响应这些变化

    $("#form").die('submit').live('submit',function() { alert('Handler called.'); return false; });

请注意,我删除了该功能

于 2013-02-12T00:31:18.507 回答