“Could not set the selected property. Unspecified error.” hatası ve olası çözümü

jQuery kullandığım bir projede, seçim kutusu(select elemanı) seçeneklerini(option) değişkende saklayarak, istediğim zaman istediğim kadar kullanmayı planladım. Daha iyi anlaşılabilmesi için ufak bir kod örneği vereyim;

  var secenekler = '<option value="34">İstanbul</option><option value="6">Ankara</option><option value="35">İzmir</option>';
  $('#Baslangic').html(secenekler);
  $('#Varis').html(secenekler);

Buraya kadar bir sorun ortaya çıkmadı. Ne zaman ki, bu şekilde doldurduğum seçim kutularında bir elemanı seçili hale getirmeye çalıştım, işte o zaman Internet Explorer 6’da (IE6) garip bir hata mesajı ile karşılaştım: “Could not set the selected property. Unspecified error.” IE7, IE8, Firefox, Opera, Chrome ve Safari’de sorunsuz bir şekilde çalışırken, IE6 bu şekilde, anlaşılmaz bir hata mesajı ile beni çıkmaza soktu. Seçim yapmak için kullandığım kod öbeğini de eklersek kod örneğimiz şu hale geliyor;

  var secenekler = '<option value="34">İstanbul</option><option value="6">Ankara</option><option value="35">İzmir</option>';
  $('#Baslangic').html(secenekler).val(34);
  $('#Varis').html(secenekler).val(35);

Hata mesajının ilk bölümü, kısmen problemin neden kaynaklandığını açıklasa da ikinci bölümdeki “Belirsiz hata” ibaresi direkt olarak bir çözüme yönlenmemi engelledi. Internetlerde yaptığım ufak bir araştırma ile bu sayfada probleme ve olası bir çözüme ulaştım. Problem IE6’da DOM’un yeteri kadar hızlı çalışamamasından kaynaklanıyormuş. DOM ağacını zamanında hazırlayamadığı için, seçim yapmak istediğimizde seçim kutusunda ilgili elemanı bulamıyor ve ilgili hata mesajını ekrana basıyor.

Problemi çözmek için bir çok alternatif yöntem uygulayabilirsiniz. Problem ile ilgili bilgi bulduğum sayfadaki çözüm, try/catch bloğunu iş akışının bir parçası olarak kullandığından benim gözümde ideal bir çözüm değil. Tabi tercih size kalmış. Benzer bir durum için benim önerebileceğim çözüm şu olabilir;

  var secenekler = '<option value="34">İstanbul</option><option value="6">Ankara</option><option value="35">İzmir</option>';
  var $Baslangic = $('#Baslangic').html(secenekler);
  var $Varis = $('#Varis').html(secenekler);
  if($.browser.msie && $.browser.version === "6.0") {
    setTimeout(function() {
      $Baslangic.val(34);
      $Bitis.val(35);
    }, 1);
  }
  else {
    $Baslangic.val(34);
    $Bitis.val(35);
  }

İşin püf noktası, tarayıcı IE6 ise, seçim işlemlerini 1 milisaniyelik bir gecikme ile gerçekleştirip, bu ufacık gecikme ile DOM’a kendini toparyalabilmesi için zaman tanımak.

Alternatif olarak, imkanınız varsa, seçeneklerden seçili olmasını istediğiniz elemana da selected=”selected” özelliğini atayarak bu hatadan kaçınabilirsiniz. Bu örnekte aynı seçenekleri birden çok kez kullanacağım için ve varsayılan olarak belirli bir tanesini seçili durumda oluşturamayacağım için bu şekilde bir çözüm yoluna gittim.

WordPress 3.0 ile beraber blog hayatınızı değiştirecek 10 yeni özellik

Yedinci yıldönümünde ilk dağıtım adayı yayınlanan WordPress 3.0 bir çok yenilikle beraber geliyor. Bunlardan en öne çıkan 10 tanesini sizler için sıraladım;

  1. WordPress MU, WordPress paketi ile birleştiriliyor. Artık sitenizi bir siteler ağına dönüştürebilirsiniz.
  2. Dahili menü sistemi geliyor. İstediğiniz yazıyı, sayfayı, kategoriyi ya da etiketi ya da istediğiniz adresi özelleştirebildiğiniz menüde kullanabileceksiniz. Menüleri kullanabilmek için temanızın menüleri destekliyor olması gerekiyor.
  3. Sitenin arka planını değiştirebilme desteği geliyor.
  4. Varsayılan tema değişiyor. Yeni tema Twenty Ten (Yirmi On ya da 2010) WordPress 3.0’ın gelişmiş özelliklerini destekliyor. Özelleştirilebilir başlık alanı, arka planın özelleştirilmesi, menü kullanımı, özelleştirilebilir yazı formatları vb…
  5. Yönetim ekranlarına yardım alanları ekleniyor. Bir yönetim ekranında neyin ne işe yaradığını öğrenmek için sağ üst köşedeki yardım sekmesini kullanabileceksiniz.
  6. Çekirdek paketi hafifletmek için içeri aktarıcılar paketten çıkartılıyor. Bir aktarıcıya ihtiyacınız olduğunda, harici olarak yükleyip kullanmanız gerekecek.
  7. Turbo özelliği paketten çıkartılıyor. Google, Turbo özelliğini kullanmak için gerekli olan Google Gears uygulamasını geliştirmeyi bıraktığını açıkladığı için, WordPress de paketten çıkartıyor.
  8. Temaları ve eklentileri toplu güncelleme desteği geliyor.
  9. WordPress yüklemesi sırasında kullanıcı adı ve parola seçme özgürlüğü. Bu sayede admin kullanıcı üzerinden yapılan atakların önüne geçilebilmiş olacak.
  10. Yavru tema özelliği: Yavru temalar, asıl temaların özelliklerine sahiptirler ve asıl temalara dokunmadan özelliklerini değiştirebilmenize olanak sağlar. Bu sayede asıl tema güncellendiğinde yaptığınız değişiklikleri kaybetmiyorsunuz.

3.0 Sürümü için hedeflenen çıkış tarihi olarak Haziran ortaları belirtilmiş.

C# ile SEO uyumlu daha anlaşılır web adresleri hazırlama

PHP ile bu işi nasıl yapabileceğimizi daha önce anlatmıştım. C# ile geliştirdiğimiz bir uygulamada da gerekli olunca biraz araştırdım. PHP ile olan deneyimlerimden yola çıkarak ihtiyaç listesi çıkarttım ve bu ihtiyaçlar doğrultusunda biraz araştırma yaptım. Bu araştırmalardan bir tanesi HTML etiketlerinin temizlenmesi konusuydu ki ondan da bahsetmiştim. Geriye çentikli karakterlerin (ğ,ü,ş,ö,ç, ì, é vb.) çentiksiz hallerine ulaşmak gibi bir problem kalmıştı. Problemin çözümüne burada ulaştım.
Okumaya devam et C# ile SEO uyumlu daha anlaşılır web adresleri hazırlama

JavaScript için HTML etiketleri temizleme metodu

Daha önce bahsettiğim .NET için HTML etiketleri temizleme metodunu JavaScript uygulamalarında kullanmak için düzenledim. Şöyle buyrun:

function StripTags(input)
{
  var array = [];
  var inside = false;

  for (i = 0; i < input.length; i++)
  {
    var let = input.charAt(i);
    if (let == '<')
    {
      inside = true;
      continue;
    }
    if (let == '>')
    {
      inside = false;
      continue;
    }
    if (!inside)
      array.push(let);
  }
  return array.join('');
}

.NET için HTML etiketleri temizleme metodu

Bir metnin içindeki HTML etiketlerini temizlemek için çözüm yolları ararken, çok ilginç bir çözüm ile karşılaştım. Bu ve benzeri durumlarda genellikle ilk olarak, problemi kendim nasıl çözerim diye düşünürüm. İlk aklıma gelen, düzgün yapılandırılmış bir düzenli ifade (regular expression) ile metnin içindeki tüm HTML etiketlerini temizlemek oldu. Uygulamaya geçmeden önce bir de internette araştırayım dedim ve burada probleme çok ilginç bir yönden yaklaşan bir çözüm buldum. Makalede benim aklıma da gelen düzenli ifadeler ile karşılaştırma da yapılmış ve makalede görebileceğiniz gibi bu yöntem çok daha hızlı çalışıyor. Bunun en önemli sebebi de çok yalın bir mantık kullanılmış olması.
Okumaya devam et .NET için HTML etiketleri temizleme metodu