функция JavaScript, действующая странно - PullRequest
0 голосов
/ 28 ноября 2010

Эй, ребята, я не могу заставить функцию работать должным образом. Смысл в том, чтобы перелезть через пареентов, пока я не получу тот, который запускает действие переключения.Но функция действует странно, и когда проверенный тег найден, он, похоже, не возвращает true и не завершает рекурсивный путь.

unction dock(e){
    if(e.get(0).tagName != "BODY"){
        alert("current : "+e.get(0).tagName)
        e.siblings(".splitter-bar").each(function(){
            alert("found sibling : "+$(this).get(0).tagName)

            if($(this).length > 0){
                e.parent().trigger('toggleDock')
                alert("triggered parent : "+e.parent().get(0).tagName)
                return true
            }       
        })
        if ( dock(e.parent()) ){
            alert("validated parent : "+e.parent().get(0).tagName)
            return true
        }
        alert("end dock(), current : "+e.get(0).tagName)
    }
    return false 
}

$(".dockme").live('click', function(event) {
    a = dock($(this))
    alert("dock returned :"+a)
});

весь код:

/* when the page is loaded */

$ (документ).ready (function () {

$("body").splitter({
    splitVertical: true,
    outline: true,
    sizeLeft: 30, minLeft: 0, maxLeft: 100,
    resizeToWidth: true,
    anchorToWindow: true,
    dock: "left",
    dockSpeed: 200,
    cookie: "docksplitter"
});
$("#a").splitter({
    splitHorizontal: true,
    outline: true,
    sizeBottom: 30, minBottom: 0, maxBottom: 30,
    dock: "bottom",
    dockSpeed: 200,
    cookie: "docksplitter"
});
$("#b").splitter({
    splitVertical: true,
    sizeRight: 320, minRight: 0, maxRight: 320,
    dock: "right",
    dockSpeed: 200,
    cookie: "docksplitter"
});

function dock(e){
    if(e.get(0).tagName != "BODY"){
        alert("current : "+e.get(0).tagName)
        e.siblings(".splitter-bar").each(function(){
            alert("found sibling : "+$(this).get(0).tagName)

            if($(this).length > 0){
                e.parent().trigger('toggleDock')
                alert("triggered parent : "+e.parent().get(0).tagName)
                return true
            }       
        })
        if ( dock(e.parent()) ){
            alert("validated parent : "+e.parent().get(0).tagName)
            return true
        }
        alert("end dock(), current : "+e.get(0).tagName)
    }
    return false 
}

$(".dockme").live('click', function(event) {
    a = dock($(this))
    alert("dock returned :"+a)
});

}); html: http://pastie.org/1329885

1 Ответ

0 голосов
/ 28 ноября 2010

Функция внутри e.siblings(...).each не возвращает true из dock.

Так что вместо

    e.siblings(".splitter-bar").each(function(){
        alert("found sibling : "+$(this).get(0).tagName)

        if($(this).length > 0){
            e.parent().trigger('toggleDock')
            alert("triggered parent : "+e.parent().get(0).tagName)
            return true
        }       
    })

Я думаю, вам нужно сказать что-то вроде:

    var triggeredInSplitterBar = false;  // ADDED

    e.siblings(".splitter-bar").each(function(){
        alert("found sibling : "+$(this).get(0).tagName);

        if($(this).length > 0){
            e.parent().trigger('toggleDock');
            alert("triggered parent : "+e.parent().get(0).tagName);
            triggeredInSplitterBar = true;  // CHANGED
        }
    });

    if (triggeredInSplitterBar) { return true; }  // ADDED
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...