如何在JavaScript中改进这个if else结构?

时间:2010-05-14 10:19:07

标签: javascript

如何在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 + ")");

7 个答案:

答案 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接受带外价值(nullundefined,甚至是''本身)以及省略了论点。它可能已经允许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));