0

我想在中途停留中显示我网站的一部分。如果用户没有 javascript,则停留显示为普通网站。

我正在获取网站,getController我的问题发生在handleLinksAndForm.

$("#Popup > a").click(function(e){
        e.preventDefault();
        getController($(this).attr("href").substr(1),element);
    });

这按预期工作。每当点击 Popover div 中的 Anchor 元素时,都会阻止默认操作,并在弹出框中加载新网站。

$("#Popup > form").each(function() {
               alert(this.name);
});
$("#Popup > form").submit(function(e) {
            alert("form");
            e.preventDefault();
            getPostController($(this).attr("action"),$(this).serialize(),element);
            return false;
});

但是,这部分不起作用。无论是 foreach 部分还是 .submit()。

所以我的问题是:我的错误是什么?如果我使用$("form").each(function() {...所有表单都可以识别,但是如果我添加额外的选择器 #Popup 则不会识别。

完整代码:

function getController(ctrl,element)
{
    $.get('/service/controller/' + ctrl, function(data){
        handleLinksAndForm(data,element)        
    })
}
function getPostController(ctrl,args,element)
{
    $.post('/service/controller/' + ctrl,args, function(data) {
        handleLinksAndForm(data,element)        
    });
}

function handleLinksAndForm(data,element)
{
    element.html(data);
    element.prepend("<div id=\"popupClose\">x</a>");
    centerPopup();
    $("#popupClose").click(function(){
        disablePopup();
   });
    $("#Popup > a").click(function(e){
        e.preventDefault();
        getController($(this).attr("href").substr(1),element);
    });
    $("#Popup > form").each(function() {
           alert(this.name);
        });
    $("#Popup > form").submit(function(e) {
        alert("form");
        e.preventDefault();
        getPostController($(this).attr("action"),$(this).serialize(),element);
        return false;
    });
}
4

3 回答 3

2

您没有提供任何 html 代码。很难说这里是否还有更多问题,例如是否真的是#popup 的子元素。但首先尝试使用:

return false;

反而:

e.preventDefault();

您也可以使用: $("#Popup form") 而不是 $("#Popup > form") 这是更安全的方式。

于 2013-01-14T12:22:42.790 回答
0

发现我的错误:

我有:

<table>
<form>
   <tr><td>...</td></tr>
</form>
</table>

正确的方法是:

<form>
<table>
    ...
</table>
</form>
于 2013-01-14T12:26:12.547 回答
0

我刚刚使用下面的代码进行了测试,并且能够找到子元素。

$("form", "#Popup").submit(function(e) {
  alert("form");
  ...
});

NB 这个语法也调用 .find() 但在眼睛上稍微容易一些。

于 2013-01-14T12:21:07.990 回答