如何在JavaScript中改进以下if-else结构?
if(isIE())
if(termin != "")
TargetElement.onclick = function() {merkzettelRemove(this, id, termin)};
else
TargetElement.onclick = function() {merkzettelRemove(this, id)};
else
if(termin != "")
TargetElement.setAttribute("onclick","merkzettelRemove(this, " + id + ",
'" + termin + "')");
else
TargetElement.setAttribute("onclick","merkzettelRemove(this, " + id + ")");
答案 0 :(得分:5)
// get a cross-browser function for adding events
var on = (function(){
if (window.addEventListener) {
return function(target, type, listener){
target.addEventListener(type, listener, false);
};
}
else {
return function(object, sEvent, fpNotify){
object.attachEvent("on" + sEvent, fpNotify);
};
}
}());
// add the event listener
on(TargetElement, "click", function(){
// if termin is empty we pass undefined, this is the same as not passing it at all
merkzettelRemove(this, id, (termin) ? termin : undefined);
});
答案 1 :(得分:2)
首先,先做一些支撑。它会让你更清楚发生的事情,以及将来编辑时会拯救无法忍受的痛苦。
是的,如果包装单个语句,可以在没有大括号的情况下离开。当你从现在起三个月过来并在其中一个块中添加其他内容时,除非你记得将整个块包装在大括号中,否则你的代码将会中断。养成从一开始就做的习惯。
答案 2 :(得分:1)
首先,在任何地方使用{},它会使你的循环更具可读性。
第二:我认为这是一样的
if(isIE()) {
TargetElement.onclick = function() {
merkzettelRemove(this, id, termin || null);
};
} else {
TargetElement.setAttribute("onclick",
"merkzettelRemove(this, " + id + ",'" + termin || null + "')");
}
第三,但您可以尝试使用unobtrusive javascript将处理程序添加到TargetElement
答案 3 :(得分:1)
首先,丢失浏览器嗅探。 onclick= function...
无处不在; setAttribute
不仅在IE中被破坏,而且还很难看。 JavaScript-in-a-string是一个很大的代码气味;避免。关于HTML属性的setAttribute
有IE问题,并且无论如何都不如简单的DOM Level 1 HTML属性可读;避免。
其次,让merkzettelRemove
接受带外价值(null
,undefined
,甚至是''
本身)以及省略了论点。它可能已经允许undefined
,具体取决于它用于支持可选参数的机制。如果是这样,你可以简单地说:
TargetElement.onclick= function() {
merkzettelRemove(this, id, termin || undefined);
};
如果你必须完全省略这个论点并且你不想使用if...else
,那么还有另一种方法,尽管IMO的清晰度更差:
TargetElement.onclick= function() {
merkzettelRemove.apply(null, termin==''? [this, id] : [this, id, termin]);
};
答案 4 :(得分:0)
我知道这不是你问题的答案,但如果你没有任何理由不这样做,你肯定应该使用一个关心兼容性问题的库,比如jQuery。然后你可以这样写:
var el = $(TargetElement);
if (termin != "")
el.click(function() {merkzettelRemove(this, id, termin)});
else
el.click(function() {merkzettelRemove(this, id)});
答案 5 :(得分:0)
我认为使用Javascript框架是最好的解决方案,但你可以尝试这样的事情:
var src="merkzettelRemove(this, " + id + (termin && (",'" + termin + "'")) + ")";
if (isIE()) {
TargetElement.onclick = new Function(src);
} else {
TargetElement.setAttribute("onclick", src);
}
答案 6 :(得分:0)
如何使用短路运营商。所以下面的代码
如果(A) {
if(B){
C; }
其他{
d;}
其他{
如果(E)
F;
其他
G;
}
}
将成为
A&& ((B& C)|| D ||((E& F)|| G));