2010-06-15 2 views
6

Gibt es eine gute Vorgehensweise, um zu vermeiden, dass Ihr jQuery-Code automatisch fehlschlägt?Muster zum Vermeiden von jQuery Silent schlägt fehl

Zum Beispiel:

$('.this #is:my(complexSelector)').doSomething(); 

Ich weiß, dass jedes Mal, diese Zeile ausgeführt werden soll, wird der Wähler bestimmt mindestens ein Element, oder gewisse Elemente anzupassen. Gibt es einen Standard oder eine gute Möglichkeit, dies zu bestätigen?

Ich dachte an so etwas wie dieses:

var $matchedElements = $('.this #is:my(complexSelector)'); 
if ($matchedElements.length < 1) 
    throw 'No matched elements'; 
$matchedElements.doSomething(); 

auch eine gültige Option Ich denke Testeinheit wäre stattdessen den Code durcheinander.

Meine Frage kann albern sein, aber ich frage mich, ob es eine bessere Option als die Dinge gibt, die ich gerade mache oder nicht. Vielleicht bin ich auch in die falsche Richtung und überprüfe, ob irgendein Element mit meinem Selektor übereinstimmt. Wenn die Seite jedoch weiter wächst, können die Selektoren nicht mehr mit einigen Elementen übereinstimmen und Teile der Funktionalität können nicht mehr unbeabsichtigt funktionieren.

Antwort

6

könnten Sie ein Plugin schreiben:

jQuery.fn.requireElements = function (amount, exactMatch) { 
    if (amount === undefined) { 
     amount = 1; 
    }; 

    if (this.length < amount || this.length > amount && exactMatch) { 
     throw new Error(this.length " elements instead of " (exactMatch ? "at least " : "") + amount); 
    }; 

    return this; 
}; 

Dann:

$('yourSelector').requireElements(2).bind('click', function() { 

}); 
6

Es ist nicht unbedingt falsch wenn ein Selektor nichts entspricht; Das hängt von Ihrer Anwendung ab. Sie könnten Ihre eigene validateNonEmpty Plugin schreiben:

jQuery.fn.validateNonEmpty = function() { 
    if (this.length == 0) 
    throw "Empty list detected - selector: " + this.selector; 
    return this; // thanks @Matt 
}; 

Dann können Sie tun:

$('something something').validateNonEmpty().doSomething(); 

Beachten Sie auch, dass Sie überprüfen möchten, um zu sehen, ob die Länge 0, nicht weniger als 0

+0

oh yea danke @Matt !! – Pointy

2

Ich würde empfehlen, jQuery lint zu verwenden.

zum Beispiel

$(function(){ 
    var foo = $('.this #is:my(complexSelector)'); 
}); 

werden beide beschweren sich, dass Sie einen ungültigen Wähler haben (wie angegeben Beispiel Wähler tatsächlich ungültig ist, obwohl ich nehme an, Sie wissen, dass :)), und dass keine Elemente, bei denen in der Tat gefunden .

Siehe http://js.azatoth.net/test/lint.html für ein Beispiel.

+0

haha ​​ich wollte nur ein lächerliches Selektor Beispiel geben, Danke! – Matias

Verwandte Themen