2012-11-26 10 views
26

Poniżej Otrzymuję ten błąd:Błąd z jQuery Komórka

enter image description here

mam zawężony kod problemu jQuery Mobile 1.0 lub wyższa i ASP.NET ScriptManager.

Dodałem nowe formy Project Web do Visual Studio 2012 i zawiera kod poniżej:

<%@ 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> 

No Code w Kodeksie Behind stronie.

  • Jest to jednak kiedy uruchomić projekt, otrzymuję powyższy błąd kiedy jest włączone zarówno ScriptManager i skrypt jQuery komórkowy.
  • Nie wystąpił błąd po usunięciu JQuery Mobile lub ScirptManager .

Pół dnia zastanawiam się i próbuję znaleźć wyjaśnienie, jedna konkretna strona internetowa, z którą się spotkałem, zasugerowała dodanie ScriptMode = "Release" do ScriptManager.

Po dodaniu ScriptMode = "Release" do ScriptManager, nie otrzymałem powyższego błędu.

Wyszukiwanie MSDN, który zdefiniował ScriptMode: Pobiera lub ustawia wartość określającą, czy renderowane są wersje debugowania lub wydania bibliotek skryptów klienta.

Błąd nie został zgłoszony po dodaniu ScriptMode do ScriptManager, ale dlaczego? Czy ktoś może wyjaśnić, dlaczego dodanie ScriptMode powstrzymuje pojawianie się błędu, i czy dodanie ScriptMode oznaczałoby naprawdę solver lub Band-Aid?

Błąd jest generowany tutaj: enter image description here

Dziękuję

Poniżej mam włączone świadczonych stronę 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> 

Poniżej pokażę jak próbowałem włączeniem 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

Nie twierdzę, że znam odpowiedź, ale zazwyczaj wersja ** debug ** zawiera dodatkowe informacje umożliwiające przeprowadzenie debugowania (dodatkowe symbole itp.). Bardzo możliwe, że te dodatkowe symbole są przyczyną i powodują konflikt z JQuery Mobile. Może spróbujesz porównać wyjście skryptu do debugowania i wydania? Może rzucić trochę światła. –

+0

dziękuję, wierzę, że mogłem coś wymyślić. Zaktualizowano w oryginalnym pytaniu. – deDogs

+0

Nie, mój pomysł nie zadziałał! – deDogs

Odpowiedz

9

Przetestowałem twój kod i udało mi się zreplikować błąd.

Po pierwsze, myślę, że ScriptManager musi istnieć przed wszystkim, co go używa. Wykonanie tej czynności nie spowoduje żadnego błędu:

<%@ 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> 

Po drugie, skrypty, które dołączasz, są wersjami minified lub release. Jest to niepotwierdzone domysły, ale może oczekuje wersji nieminified lub debugowania dla renderowania, a one nie istnieją i umieszczenie ScriptMode = "Release" prawdopodobnie pozwala mu wiedzieć, że powinien używać minified wersji. Można to przetestować, włączając skrypty minified i debugowania do projektu zamiast zdalnie je pobierać ...... Tak właśnie działa MVC, dlatego sugeruję, że może aplikacja internetowa działa tak samo.

marginesie: następstwie informacji na ten link Oto kolejny sposób, który nie powoduje żadnych błędów:

<%@ 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> 

Edit:

Z jakiegoś powodu Próbowałem również ustawienie tego w pliku web.config:

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

do tego:

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

Działa to również z oryginalnym kodem, ale z jakiegoś powodu czuję, że jest to bandaid, ponieważ najprawdopodobniej po prostu ukrywa błąd, zamiast go naprawiać.

+0

Dziękuję, uważam, że znacznik formularza nie powinien istnieć w sekcji nagłówka. Jednak przetestowałem Twój kod za pomocą tagu Form w nagłówku i otrzymałem ten sam błąd. Ponownie przetestowałem umieszczenie skryptu przed i po ScriptManager, i otrzymałem podobny błąd w obu przypadkach. Minified JavaScript nie jest skompilowany. To wciąż JavaScript. Uważam, że to nadal prawda? Moim zdaniem jest JavaScript, w formie zminimalizowanej lub rozszerzonej, powinien działać w debugowaniu lub bez debugowania. Rozwiązując błąd, muszę dodać ScriptMode = "Release" – deDogs

+0

Moduł wyliczający ScriptMode dostarcza wartości do ustawienia wersji skryptu klienta, która ma być używana na stronie sieci Web. Wartości modułu wyliczającego można zastosować do właściwości ScriptMode obiektu ScriptManager lub do właściwości ScriptMode obiektu ScriptReference. Obiekt ScriptManager ustawia wersję dla wszystkich skryptów na stronie, chyba że zostanie nadpisany przez obiekt ScriptReference. Obiekt ScriptReference ustawia wersję dla określonego skryptu. – deDogs

+0

Kod działa dla mnie, więc nie wiem, co powiedzieć, ale jestem pewien, że menedżer skryptów musi istnieć zanim zostanie użyty. Nie jestem pewien co do tagu formularza i nie mogłem znaleźć nic online, więc zadałem to pytanie: http://stackoverflow.com/questions/13850317/is-there-a-good-reason-that-a-forma- tag-should-not-exist-in-the-head-tag ... Możesz także spróbować użyć wbudowanych zasobów skryptów, ale będziesz musiał hostować własne skrypty. Mogę dodać przykład, jeśli chcesz. – Soenhay

Powiązane problemy