2012-11-26 103 views
26

下面,我收到此錯誤:錯誤使用jQuery移動

enter image description here

我已經縮小問題代碼jQuery Mobile的1.0或更高版本和Asp.NET的ScriptManager。

我添加了一個新的Web窗體項目到Visual Studio 2012,幷包括下面的代碼:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
    <link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.css" /> 

    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"></script> 
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script> 

</head> 
<body> 
<form id="form1" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" ScriptMode="Release" runat="server"></asp:ScriptManager> 
    <div> 

    </div> 
</form> 
</body> 
</html> 

在代碼中的代碼頁的後面。

  • 這是它,但是當我運行該項目,我收到上述錯誤當包含 兩者的ScriptManager和jQuery Mobile的腳本。
  • 沒有錯誤發生當JQuery Mobile或ScirptManager被刪除時 。

半天想知道並試圖找到解釋,我遇到的一個特定網站建議將ScriptMode =「Release」添加到ScriptManager。

將ScriptMode =「Release」添加到ScriptManager後,我沒有收到上述錯誤。

搜索定義ScriptMode的MSDN:獲取或設置一個值,該值指定是否呈現客戶端腳本庫的調試版本或發佈版本。

將ScriptMode添加到ScriptManager後不會引發錯誤,但是爲什麼?有人可以解釋爲什麼添加ScriptMode可以阻止出現的錯誤,並且只需添加ScriptMode就意味着解決方案還是創可貼?

錯誤在這裏拋出: enter image description here

謝謝

下面我已經包含呈現的HTML頁面:

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><title> 

</title><link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" /> 
    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
    <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script> 

</head> 
<body> 
    <form method="post" action="WebForm1.aspx" id="form1"> 
<div class="aspNetHidden"> 
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE3MTc1MDc5MjBkZKegov+UVDfF6HxSUeRymFH24991gFZlPU0b/IsFSVOC" /> 
</div> 

<script type="text/javascript"> 
//<![CDATA[ 
var theForm = document.forms['form1']; 
if (!theForm) { 
    theForm = document.form1; 
} 
function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
//]]> 
</script> 


<script src="/WebResource.axd?d=YNeW-uV30W9QUFseu7cpdlXTvjGS-17TUbJFOrYgly8h7oJPnNmO65B9MsXEKqakJOaVgg29CB6vB4ZdmlLF7g8EEKPfdXLBpPT96ABclOM1&amp;t=634773918900000000" type="text/javascript"></script> 


<script src="/ScriptResource.axd?d=1zt3Mkq4WcBu9zbsV4m9-M7KCvrT-jr1XXgEzhW9nlIjwSm5LqLoLvy1RRMu-5CPbCTtFRsnupAShqvEwf1EA89LxKLiAOgKvWaOicLhKJXKcoRKfxG9wfeNLN-ZylWfgK9ozBiE9bfZ-FsMcBHxpWRRemoiIMSGZzuYvNAs6Evl_1N7xJCIcbyAp01izsBK0&amp;t=6119e399" type="text/javascript"></script> 
<script type="text/javascript"> 
//<![CDATA[ 
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.'); 
//]]> 
</script> 

<script src="/ScriptResource.axd?d=QXV43dBeyoevgM325nU9rlBmVyB375pfaFEuLQ1v1BisiTdf-HdmxtF90_hgFfCcn3l6abc0C_OIvNebx_7cosgD1E8ZEeTK680r4HRGT7Pngzk9Ei-BKOI48hrwHGv9cUfKN2zloA0qh8YHXKfefO8eUGQhV8M-XarSzMOPpgJwr8FS8Yb8rvlVPvcSzSTE0&amp;t=6119e399" type="text/javascript"></script> 
     <script type="text/javascript"> 
//<![CDATA[ 
Sys.WebForms.PageRequestManager._initialize('ScriptManager1', 'form1', [], [], [], 90, ''); 
//]]> 
</script> 

     <div> 
     </div> 
    </form> 
</body> 
</html> 

下面我告訴我如何試圖打開noConflict:

<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" /> 
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 

<script type="text/javascript"> 
    $.noConflict(); 
</script> 

<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script> 
+0

我並沒有聲稱知道答案,但通常是** debug **版本包含額外的信息以允許進行調試(額外的符號等)。這很可能是因爲這些額外的符號是罪魁禍首,正在引發與JQuery Mobile的衝突。也許嘗試在調試和發佈腳本的輸出之間進行比較?它可能會流露出一些光芒。 –

+0

謝謝,我相信我可能已經想到了一些東西。原始問題更新。 – deDogs

+0

不,我的想法不起作用! – deDogs

回答

9

我測試了你的代碼,我能夠複製錯誤。

首先,我認爲ScriptManager必須存在於任何使用它的東西之前。這樣做會導致沒有錯誤:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
<title></title> 
    <link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.css" /> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
    </form> 
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"></script> 
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script> 
</body> 
</html> 

其次,要包括的腳本是縮小的或發行版本。這是一個未經證實的猜測,但也許它需要非縮小或調試版本進行渲染,並且它們不存在,並且將ScriptMode =「發佈」可能會讓它知道它應該使用縮小版本。這可以通過在項目中包含縮小和調試腳本來測試,而不是遠程獲取它們......這就是MVC的工作方式,因此我建議可能Web應用程序的工作原理相同。

旁白: 繼此link這裏的信息是不產生任何錯誤,另一種方式:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %> 

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
<title></title> 
    <link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.css" /> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
       <Scripts> 
       <asp:ScriptReference Path="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"/> 
       <asp:ScriptReference Path="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.js" /> 
      </Scripts> 
     </asp:ScriptManager> 
    </form> 
</body> 
</html> 

編輯:

出於某種原因,我也試着在web.config中設置這樣的:

<compilation debug="true" targetFramework="4.0"/> 

這樣:

<compilation debug="false" targetFramework="4.0"/> 

這也適用於您的原始代碼,但出於某種原因,我覺得它是一個bandaid,因爲它很可能只是隱藏錯誤而不是修復它。

+0

謝謝,我相信Form標籤不應該存在於標題部分。但是,我使用表頭標籤測試了您的代碼,並且收到了相同的錯誤。我已經在ScriptManager之前和之後重新測試了放置腳本,並且在兩個實例中都收到類似的錯誤。縮小的Javascript未編譯。它仍然是Javascript。我相信這仍然是事實?我的想法是JavaScript,無論是最小化還是擴展形式,都應該在調試或無需調試的情況下工作。解決錯誤,我需要添加ScriptMode =「Release」 – deDogs

+0

ScriptMode枚舉器提供的值用於設置在網頁上使用哪個版本的客戶端腳本。枚舉值可以應用於ScriptManager對象的ScriptMode屬性或ScriptReference對象的ScriptMode屬性。 ScriptManager對象爲頁面上的所有腳本設置版本,除非它被ScriptReference對象覆蓋。 ScriptReference對象設置特定腳本的版本。 – deDogs

+0

該代碼適用於我,所以我不知道該怎麼說,但我確信scriptmanager在使用之前需要存在。我不確定窗體標籤,我無法找到任何東西,所以我提出了這個問題:http://stackoverflow.com/questions/13850317/is-there-a-good-reason-that-a-form-標籤不應該存在於頭部標籤中......您也可以嘗試使用嵌入式腳本資源,但您必須託管自己的腳本。如果你願意,我可以添加一個例子。 – Soenhay