Sidslog

Май 27, 2008

Поменялся яваскрипт к предыдущему посту

Filed under: Uncategorized — Метки: , , , , , — sidslog @ 2:39 пп

Были ошибки в JS, написанном в предыдущем посте. Те, что нашел, исправил. Также исправил яваскрипт для компоненты, срабатывающей по фокусу. Код самой компоненты появится через пару дней))

Вот исправленный JS:

var searchValue = “” ;

var onloadFunctions = new Array() ;
var onAfterLoad = new Array() ;

var FindHandler = new Object() ;

var searchElements = new Array() ;
var searchStrings = new Array() ;

FindHandler.testClass = function(tagClass, className) {
    var classN = new RegExp(“(^|\\s)” + className + “(\\s|$)”);
    return classN.test(tagClass) ;
}

FindHandler.getParentByClass = function(className, tag) {
    while (tag.parentNode) {
        if (tag.className && this.testClass(tag.className, className)) {
            return tag ;
        } else {
            tag = tag.parentNode ;
        }
    }
    return null ;
}

FindHandler.getElementsByClassName = function(className, tag) {
    var tag = tag || document ;

    var returnElements = new Array() ;
    for (var i = 0 ; i < tag.childNodes.length; i ++) {
        if (tag.childNodes[i].className && this.testClass(tag.childNodes[i].className, className)) {
            returnElements.push(tag.childNodes[i]) ;
        }
    }

    for (var i = 0 ; i < tag.childNodes.length; i ++) {
        var ret = this.getElementsByClassName(className, tag.childNodes[i]) ;
        if (ret) {
            for (var j = 0 ; j < ret.length; j ++) {
                returnElements.push(ret[j]) ;
            }
        }
    }

    return returnElements.length > 0 ? returnElements : null ;
}

var KeyCode = new Object() ;
KeyCode.VK_ENTER = 13 ;

var f1 =  function() {
    var form = document.forms[0] ;
    if (form) {
        form.onkeypress = function(e) {
            var key;
            if (window.event)
                 key = window.event.keyCode;     //IE
            else
                 key = e.which;     //firefox

            if (key == KeyCode.VK_ENTER) {

                var target ;
                if (window.event) {
                    target = window.event.srcElement ;
                } else {
                    target = e.target ;
                }
                var parent = FindHandler.getParentByClass(“useonenter-container”, target) ;
                if (parent) {
                    var controls = FindHandler.getElementsByClassName(“useonenter-control”, parent) ;
                    if (controls && controls[0]) {
                        if (controls[0].tagName == “INPUT” || controls[0].tagName == “BUTTON”) {
                            controls[0].click() ;
                        } else {
                            controls[0].onclick() ;
                        }
                    }
                }
                return false ;
            }

            return true ;
        }

    }
}

function focusSearch() {
    var target ;
    if (window.event) {
        target = window.event.srcElement ;
    } else {
        target = this ;
    }
    var index = searchElements.indexOf(target) ;
    if (target.value == searchStrings[index]) {
        target.value = “” ;
    }
}
function blurSearch() {
    var target ;
    if (window.event) {
        target = window.event.srcElement ;
    } else {
        target = this ;
    }
    var index = searchElements.indexOf(target) ;
    if (target.value == “”) {
        target.value = searchStrings[index] ;
    }
}
var f2 = function() {
    var allElements = FindHandler.getElementsByClassName(‘search-value-container’, null) ;

    var el = new Array() ;
    if (allElements) {
        for (var i = 0; i < allElements.length; i ++) {
            el[i] = allElements[i] ;
            if (el[i]) {
                el[i].onfocus = focusSearch ;
                el[i].onblur = blurSearch ;
            }
        }
    }
}

var setFocusEvents = function() {
    if (searchElements && searchStrings) {
        if (searchElements.length == searchStrings.length) {
            for (var i = 0; i < searchElements.length; i ++) {
//                alert(searchElements[i]) ;
                searchElements[i].onfocus = focusSearch ;
                searchElements[i].onblur = blurSearch ;
                searchElements[i].onfocus ;
                searchElements[i].onblur ;
                if (searchElements[i].value == null || searchElements[i].value == “”) {
                    searchElements[i].value = searchStrings[i] ;
                }
            }
        }
    }
}

var changeBeforeSubmit = function() {
    var form = document.forms[0] ;
    if (form) {
        form.onsubmit = function() {
            for (var i = 0; i < searchElements.length;  i ++) {
                if (searchElements[i].value == searchStrings[i]) {
                    searchElements[i].value = “” ;
                }
            }
        }
    }
}

onloadFunctions.push(f1) ;
onloadFunctions.push(f2) ;
onloadFunctions.push(changeBeforeSubmit) ;
onAfterLoad.push(setFocusEvents) ;

window.onload = function() {
    for (var i = 0 ; i < onloadFunctions.length; i ++) {
        onloadFunctions[i]() ;
    }
    for (var i = 0 ; i < onAfterLoad.length; i ++) {
        onAfterLoad[i]() ;
    }
}

Theme: Silver is the New Black. Блог на WordPress.com.

Follow

Get every new post delivered to your Inbox.