该功能不起作用

时间:2018-03-11 09:17:10

标签: javascript events arguments

我对此代码有疑问。当我编写第一个代码时,一切正常,但在处理之后它无法正常工作。为什么会那样?我发送了一个事件对象作为参数,所以问题是什么?

初始代码:

var isOkej = null;
function isNumber(someValue) {
    return !isNaN(someValue);
}
window.onload = function () {
    var wykonawca = document.getElementById("informations").artist;
    var tytul = document.getElementById("informations").title;
    var label = document.getElementById("informations").label;
    var kindOftxt = document.getElementById("kindOftxt");

    var action = function (e) {
        //pokazuje unicode wpisanego znaku
        var wpisanyZnak = e.which;
        if (isNumber(this.value) || wpisanyZnak === 190) {
            e.preventDefault();
            if (this === wykonawca)
                kindOftxt.innerHTML = "Podaj swój Alias";
            else if (this === tytul)
                kindOftxt.innerHTML = "Podaj tytuł utworu";
            else
                kindOftxt.innerHTML = "Gdzie utwór został wydany";

            this.style.backgroundColor = "red";
            isOkej = false;
        } else {
            this.style.backgroundColor = "green";
            kindOftxt.innerHTML = "";
            isOkej = true;
        }
    };
    wykonawca.onkeyup = action;
    tytul.onkeyup = action;
    label.onkeyup = action;
}

最终代码:

function isNumber(someValue) {
    return !isNaN(someValue);
}
var isOkej = null;
 function action (e, wykonawca, tytul,kindOftxt) {
        //pokazuje unicode wpisanego znaku
        var wpisanyZnak = e.which;
        if (isNumber(this.value) || wpisanyZnak === 190) {
            e.preventDefault();
            if (this === wykonawca)
                kindOftxt.innerHTML = "Podaj swój Alias";
            else if (this === tytul)
                kindOftxt.innerHTML = "Podaj tytuł utworu";
            else
                kindOftxt.innerHTML = "Gdzie utwór został wydany";

            this.style.backgroundColor = "red";
            isOkej = false;
        } else {
            this.style.backgroundColor = "green";
            kindOftxt.innerHTML = "";
            isOkej = true;
        }
    };

window.onload = function () {
    var wykonawca = document.getElementById("informations").artist;
    var tytul = document.getElementById("informations").title;
    var label = document.getElementById("informations").label;
    var kindOftxt = document.getElementById("kindOftxt"); 

    wykonawca.onkeyup = function (e) {
        action(e, wykonawca,tytul,kindOftxt);
    };    
     tytul.onkeyup = function (e) {
        action(e, wykonawca,tytul,kindOftxt);
    };    
    label.onkeyup = function (e) {
        action(e, wykonawca,tytul,kindOftxt);
    };    }

我真的不知道可能是什么原因。您认为什么可能是个问题?

1 个答案:

答案 0 :(得分:1)

使用以下代码绑定事件时,this内部action函数绑定到输入元素。

wykonawca.onkeyup = action;
tytul.onkeyup = action;
label.onkeyup = action;

使用更新的代码

绑定事件时
wykonawca.onkeyup = function (e) {
    action(e, wykonawca,tytul,kindOftxt);
};    
tytul.onkeyup = function (e) {
   action(e, wykonawca,tytul,kindOftxt);
};    
label.onkeyup = function (e) {
    action(e, wykonawca,tytul,kindOftxt);
};

匿名事件处理程序中的this绑定到input元素,但在action函数中,this将引用全局对象,即窗口对象。

您可以将匿名处理程序的this引用传递给action函数作为附加参数。