2010-04-27 18 views
6

Bir DOM-id bulunamazsa null döndüren, Prototype.js'de biraz kod yazıyorum. someId yoksaJetror'de "NullPointerExceptions" Yakala

$("someId").show(); 

, bir yöntem hatası sonuçta JS etkileri devre dışı bırakılması aslında, tüm programı durdurur, hangi boş üzerinde çağrılacak. Böyle bir bildirimi yürütmeden önce boş gösterebilirim, ama bu yorucu oluyor.

Bir istisna yakalamak isterim ama hangisinin olduğundan emin değilim. MDC aşağıdaki ECMA Script hata türlerini listeler, ancak bunların ilk bakışta hiçbiri üzerinde ne istiyorum gibi görünüyor: Ayrıca

* Error 
* EvalError 
* RangeError 
* ReferenceError 
* SyntaxError 
* TypeError 
* URIError 
* DOMException 
* EventException 
* RangeException 

tarayıcılar boş bir yöntem çağrısı ile başa birleşik bir yol var mı? Sadece hangi istisna görmezden

+5

* Böyle bir deyimi çalıştırmadan önce boş olup olmadığını kontrol edebilirim, ancak bu yorucu oluyor. * Huh? Bir geliştiricisin, değil misin? Sağlam kodların çekle yazılması normal ve iyi bir uygulamadır. – BalusC

+0

İyi bir nokta, ancak tümceler benim kodumu gerçekten okunamaz hale getirirse tekrar tekrar iç içe. Bunu 'yorucu' yerine söylemeliydim. –

+0

, sizin için çalışıyorsa cevabı kabul et –

cevap

0

...

try 
{ 
    null.hey() 
} 
catch(e) 
{ 
    //handle it here 
} 
2

Ben bulunacak birlik var inanmıyorum. Chrome bir TypeError atar, ancak IE bir Hata atar, bu yüzden muhtemelen her şeyi yakalamak ve ciddi varsayımlar yapmak zorunda kalırsınız. İlk önce boşluğu kontrol etmek daha iyi. element.show() Eğer

var element = $('someId'); 
if (element) { 
    element.show(); 
    // whatever else... 
} 

ama uygun olacağını çoğu durumda, o zaman tabii ki çok daha kısa yazılabilir, Sizin için ihtiyacınız olan tek şey. Zincire gidecekseniz

1

show(), $("someId") numaralı telefondan önce sonucunu kontrol et. nedense Eğer gerçekten onları tanımlamak gerekirse

if ($("someId")) 
    $("someId").show(); 

or 

$("someId") && $("someId").show(); 

or 

if (someVar = $("someId")) 
    someVar.show(); 

Eğer $ (sarmak) ve özel bir özel durum olabilir:

function NullReferenceException(id) {this.id = id} 

function $my(id) { 
    var el = $(id); 
    if (!el) 
     throw new NullReferenceException(id); 
    return el 
} 

try { 
    $my("iDontExistId").show(); 
} catch (e) { 
    if (e instanceof NullReferenceException) 
     alert(e.id + " doesn't exist"); 
} 
1

bu işlemek için doğru yolu şey yapmadan önce boş olup olmadığını kontrol etmektir bir nesne ile. Bunu yapmak için birkaç stenografi yolları (Alex K gibi) olduğu en kısa

$("someId") && $("someId").show(); 

yazdım ama bu okumak daha zor görünüyor bana vardır.

Eğer

try { $('someId').show(); } catch (e) {} 

yapabilirsiniz doğrudan soruya cevap vermek için ama bu amatörce görünüyor. Açıkça programlamalısınız, çünkü daha sonra başka birisinin neden bu garip kodu yazdığını bilmeyecek. İlk örnek biraz opaktır, ancak en azından ilk önce boş testi içerir ve show() yöntemindeki hataları gizlemez. yerine Prototip JQuery kullanıyormuş kimlikli hiçbir nesne olmasa bile

arada, bu kod hatasız çalışacak 'SomeID':

$('#someId').show() 

var Bunun nedeni JQuery dönüşlerinde $() işlevi Boş olabilecek ama asla boş olmayan bir koleksiyon.

+0

Bunu anlıyorum ve patronum prototip üzerinde ısrar etti. Sevdim ama bu konu gerçekten annyoing. JQuery'de nasıl çalıştığını belirtmek için –

+0

+1. –

İlgili konular