2015-09-17 29 views
16

Ürün stok sayfasındaki sonuçları sıralamak için bir açılırma listesi için bazı JavaScript'im var. Internet Explorer'da sıralama iyi çalışıyor ve tarayıcı bunu mükemmel bir şekilde ele alıyor.Neden bu açılır liste, Internet Explorer'da çalışma sıralama için değil, Chrome'da mı çalışıyor?

MyExampleSite.com: Ancak Chrome'da her zaman (? Eğer, bir şey IE ile çalışır fakat Chrome harici inanabilir)

IE'de

Ben URL şöyle Sıralama Kriteri'ni kullanmak başarısız/Malzemeleri/Ürünler/12345/myProduct/a = 0

Chrome'da Sıralama Kriteri'ni yapmak Ancak burada URL neye benzediği:?

MyExampleSite.com/Supplies/Products/12345/Benim ürünüm/? & amp; a = 0

bunu URL'ye amp ekler ve ben sadece eklemek sıralamak için denemeye devam eğer ek bir amfi her bulunuyor görebileceğiniz gibi.

$("[name=a]").change(function() {  
     window.location = '@(this.Model.SortUri)' + '@(this.Model.SortUri.IndexOf('?') == -1 ? "?" : "&")a=' + this.value; 
    }); 

Benim Çözüm böyle Html.Raw eklemek oldu:

$("[name=a]").change(function() { 
     window.location = '@(this.Model.SortUri)' + '@Html.Raw(this.Model.SortUri.IndexOf('?') == -1 ? "?" : "&")a=' + this.value; 
    }); 

Ve birden IE ve Chrome'da çalışıyor İşte

benim sorunlara neden JavaScript'tir.

Sorunun nedeni, Chrome'un bunu neden gerçekleştirdiğini, ancak IE'yi değil mi?

+1

@ Html.Raw() Razor'un bir parçasıdır. Bu muhtemelen JavaScript ile daha az ve daha fazlası var. Ayrıca daha iyi bir başlığa ihtiyaç duyar - bu soruya verilen cevap biraz kafa karıştırıcıdır, çünkü çözüm * her iki tarayıcıda da çalışır. – BoltClock

+0

Düzenledim. İşaretçiler için teşekkürler. – maxshuty

+2

'&' url kodlamasına ait değil, bir html öğesi ... IE'nin ilk etapta olmaması gerektiği için uygun olmadığını kabul ettiği gerçeği – charlietfl

cevap

5

(dış mantığı ou inşa ve doğrudan burada o değişkeni ekleyin) sizin Html.Raw bir parçası olarak tüm dize yapmak gerekir Tüm şeylerin doğru bir şekilde kodlandığından emin olmalısın ve tahmin etmediğini tahmin ediyorum. Bunu belirlemek için sayfanızın daha fazlasını görmemiz gerekir. IE muhtemelen yanlış yaptığınızı ve sizin için düzeltmeyi denediğinizi saptarken, Chrome hatalarınızı otomatik olarak düzeltmez.

Yaptığınız ve kaçmaya ihtiyaç duymadığınız zaman kurallarına göre oldukça karmaşıklaşır. Bir HTML sayfasında ve herkes HTML sayfalarında &'dan kurtulmak gerektiğini biliyor, ancak bir komut dosyası etiketinde, siz de mi yoksa kaçmak zorunda değil misiniz? Peki, bu, bir CDATA öğesinde komut dosyası etiketine sahip olup olmadığınıza bağlıdır.

Basit çözüm bunu yapmaktan kaçınmaktır. Bu aynı zamanda hareketli yararı vardır

$("[name=a]").change(function() { 
    window.location.href = $(this).data('urlprefix')+encodeURIComponent(this.value); 
}); 

: En javascript Sonra

<sometag name='a' data-urlprefix='@(this.Model.SortUri)@(this.Model.SortUri.IndexOf('?') == -1 ? "?" : "&")a='>stuff</sometag> 

: Üzerinde geçmek istediğiniz URL'yi koy şöyle bir veri etiketi olarak eleman [isim = a] sunucu sadece HTML parçalarına işleniyor, böylece javascript'i kendi dosyanızın içine koyabilirsiniz, bu şekilde yapmanız gerekir.

  • this.value numaralı URL'leri deşifre etmeniz gerektiğini unutmayın. Kodlanmışsa, güvenli bir şekilde kaldırabilirsiniz. Ayrıca window.location.href penceresini de değiştirdim çünkü window.location bazen garip şeyler de yapabilir - bazı tarayıcılarda kodlama yapabilir, ancak diğerleri üzerinde değil, vb.
+0

Aslında, javascript'i '$ (document) .on (' change ',' [data-urlprefix] ', function() {window.location.href = $ (this) .data (' urlprefix ') olarak değiştirmenizi öneririm. ') + encodeURIComponent (this.value);}); 'dinamik olarak yüklenmiş UI elemanlarında bile çalışacak ve belge elemanının kendisine bağlı olduğu için $ (document) .ready' da paketlenmesine gerek yoktur. Biri belgeyi gerçekten değiştirmeden önce değiştirirse, gerçekten "hazır" olur. –

5
+0

Sorunu düzelttim ama sorusu daha fazla oldu * Neden * IE ve Chrome'da Html.Raw – maxshuty

+1

kullanmadan böyle davranıyorsa lütfen bu http://stackoverflow.com/questions/25855376/internet-explorer- fixing-and-encoding-link-firefox-and-chrome-are-not Ayrıca, daha iyi bir açıklama burada http://www.troyhunt.com/2012/04/browser-url-encoding-and-website.html – user2624242

+3

@ user2624242 bu harici bağlantıyı cevabınıza dahil etmek ve ilgili bölümleri alıntılamak isteyebilirsiniz. – simbabque

İlgili konular