2013-01-14 64 views
0

我想在停留期間顯示我的網站的一部分。如果用戶沒有JavaScript,則中途停留顯示爲普通網站。選擇div中的所有表單並阻止默認操作

我收到的網址爲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; 
    }); 
} 
+1

你確定有針對性的形式#Popup的直接孩子?發佈相關的HTML怎麼樣? –

+0

你可以發佈一些原始的html也做出更清晰的圖片,看來你正在阻止對父元素無法觸發的子元素的默認操作,即形式。並且不要使用'preventDefault()'和'return false'來創建。 – Rohit416

+0

感謝您的努力,但我發現我的錯誤,它與HTML相關。檢查我自己的回答 – jussi

回答

2

您沒有提供任何html碼。所以很難說如果不是這裏更多的問題,例如,如果真的是元素形成#popup的一個孩子。 但首先嚐試使用:

return false; 

代替:

e.preventDefault(); 

您也可以使用: $( 「#彈出的形式」),而不是$( 「#彈出>表」),它是更安全辦法。

+0

謝謝你。我會用它。 – jussi

+1

'return false'實際上會調用'preventDefault()'和'stopPropagation()',如果我們沒有使用正確的選擇器,這會導致未來的錨標籤行爲令人驚訝。如果只能使用默認行爲,那麼應該總是喜歡'preventDefault()',這也是有意義的。 – Rohit416

0

我只是用下面的代碼測試,我能夠找到的子元素。

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

N.B.該語法也調用.find(),但在眼睛上稍微容易一些。

0

找到我的錯誤:

我:

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

正確的做法是:

<form> 
<table> 
    ... 
</table> 
</form>