0

ウェブサイトの一部を乗り継ぎで表示したい。ユーザーがJavaScriptを持っていない場合、レイオーバーは通常のWebサイトとして表示されます。

でWebサイトを取得していgetControllerますが、で問題が発生しhandleLinksAndFormます。

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

これは意図したとおりに機能します。Popover divのAnchor要素をクリックするたびに、デフォルトのアクションが阻止され、新しいWebサイトがPopoverにロードされます。

$("#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

以下のコードでテストしたところ、子要素を見つけることができました。

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

注意:この構文は.find()も呼び出しますが、見た目は少し簡単です。

于 2013-01-14T12:21:07.990 に答える
0

私の間違いを見つけました:

私が得た:

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

正しい方法は次のとおりです。

<form>
<table>
    ...
</table>
</form>
于 2013-01-14T12:26:12.547 に答える