2013-01-20 33 views
-2

我目前正在創建一個MVC4 web應用程序,我似乎遇到了一個奇怪的問題。我創建了一個無序列表,其中包含一些列表項以及它們各自的錨點標籤,我可以點擊它們,這將返回相應的視圖。在DOM元素上調用preventDefault

<div> 
     <ul> 
      <li> 
       <a class="ajax" href="/Test/One"></a> 
      </li> 
      <li> 
       <a class="ajax" href="/Test/Two"></a> 
      </li> 
      <li> 
       <a class="ajax" href="/Test/Three"></a> 
      </li> 
      <li> 
       <a class="ajax" href="/Test/Four"></a> 
      </li> 
     </ul> 
    </div> 

    <div id="body"> 
    </div> 

我已經然後創建了一些jQuery的,當您單擊錨標記,尋找一類「AJAX」的打電話,如果你點擊的錨標記,它會再運行另一個叫功能GetContent,傳遞錨定標記的值,該值將被用作ajax調用的路徑。

$(document).ready(function() { 
    $(".ajax").click(function() { 
     var path = $(this).attr("href"); 
     GetContent(path); 
    }); 
}); 

function GetContent(path) { 

    $.ajax({ 
     url: path, 
     type: 'POST', 
     async: false, 
     success: function (result) { 
      $("#body").html(result); 
     } 
    }); 
} 

我聽到一個功能,您可以打電話,叫的preventDefault我相信的。我發現我不知道何時調用此preventDefault來覆蓋錨點標記的點擊。

我嘗試將它放到幾個位置,但沒有運氣......我現在發現我可以單擊任何錨點標記,並且發生默認操作,它只是返回整個加載新視圖的網站。但是,如果我在google chrome開發人員工具中打開控制檯,並調用函數GetContent,通過期望的路徑傳遞,它將調用函數,返回ajax並更新我的網頁。

如果有人能夠指出我應該在哪裏調用preventDefault函數,那會很棒。

+1

*「我聽說過,我相信一個功能,您可以打電話,叫了preventDefault的。」 *我,這樣也已經聽到傳言一個函數。在網絡的叢書中已經有很多報道。或者等一下,** [在文檔中](http://api.jquery.com/event.preventDefault/)**。而且!文檔中的示例阻止鏈接的默認操作。發誓。 –

+0

在click處理函數中使用'return false;'或者只是在函數(e)中傳遞一個參數,並在click處理函數後面使用'e.preventDefault()'。 – Jai

+0

謝謝T.J,真的很感謝這個諷刺...我只是jquery的新手,所以給我一個休息... 謝謝Jai,感謝幫助。 – OhTehNoes

回答

3

preventDefaultevent對象的一種方法。你得到的參考event對象的Click事件處理程序的第一個參數...

$(".ajax").click(function (event) { 
    var path = $(this).attr("href"); 
    GetContent(path); 
    event.preventDefault(); 
}); 
+0

謝謝拉斐爾,我很感激幫助,這正是我所希望的那種答案。 – OhTehNoes

+0

它仍然看起來好像它不能正常工作......我仍然看到整個頁面刷新和URL更改以匹配正常請求。當我簡單地使用控制檯本身調用GetContent函數時不會發生這種情況。 – OhTehNoes

+0

這可能意味着很多事情。有些代碼部分在達到'event.preventDefault'調用之前拋出錯誤。或者點擊處理程序未附加到鏈接。第二個可以通過在'var path = ...'行之前放置alert('test')'來輕鬆檢查。第二個,你必須在瀏覽器中檢查錯誤控制檯。在其他情況下,我們需要一個實例,以便我們點擊它。 – Rafael