如何正确地将“ this”对象发送给函数

时间:2019-10-15 06:59:05

标签: javascript jquery

我有一个要在某些事件上触发的功能。该函数必须访问事件发生所在元素的“ this”对象。我很难将其传递给函数。

这是我的代码,但无法正常工作,看来问题在于“ thisVariable”不是原始元素。我有类似的代码,可拆分为更多功能,但是可以工作,我只是想简化事情。

$(document).on('focusin', '.formInput', function () {
    freezingScanNewRowEvaluation(this);
});

function freezingScanNewRowEvaluation(thisVariable) {
    var currentInput = thisVariable;
// other stuff, more event listeners binded to the original element
}

此方法实际上是否有效,我在做其他错误的事情,还是像胡说八道那样传递“ this”?谢谢

编辑:我的整个功能: Edit2:问题似乎在于将更多事件绑定到$(currentInput),它注册了Enter按钮,但未检测到其他任何东西,并且控制台中未显示任何错误。

function freezingScanNewRowEvaluation(thisVariable) {
    var currentInput = thisVariable;
    var parentRow = thisVariable.closest(".formRow");
    var parentComponent = thisVariable.closest(".newScanRowComponent");
    var nextRow = $(parentRow).next();
    if ($(parentRow).hasClass("formRow--editMode") == false) {
        return;
}

$(parentRow).find("label").text($(".newScanRowComponent").length);

// Save current value of element
$(currentInput).data('oldVal', $(currentInput).val());

// Look for changes in the value
$(currentInput).bind("propertychange change click keyup input paste", function (event) {

    if (event.which == 13) {
       // stuff - This detects ok, but none of the other events do...
    }

    // If value has changed...
    var inputValueNew = $(currentInput).val();
    var inputValueOld = $(currentInput).data('oldVal');

    if (inputValueOld != inputValueNew) {
        // Updated stored value
       $(currentInput).data('oldVal', $(currentInput).val());

        if (inputValueNew.length - inputValueOld.length > 6) {
        rowSuccessMarkerShow(parentRow);
        switchInputRowType(parentRow);

        // stuff
        }   
    }
});

function switchInputRowType(row) {
    if ($(row).hasClass("formRow--editMode" && $(row).find("input").val() != "")) {
        // stuff
    } else if (row.hasClass("formRow--active")) {
        // stuff
    }
}

function rowSuccessMarkerShow(row) {
    if (!$(row).hasClass("formInput1") && $(row).find("input").val() != "") {
        // stuff
    } 
}
}

1 个答案:

答案 0 :(得分:0)

感谢大家的答复,您最有帮助!

我需要问的最重要的事情是我从前两个答复中获悉,它们是由SomePerformance和VLAZ提供的。 看来我的错误是我在这里的回调函数后面加上了括号:
$(document).on('focusin','.formInput',FrozenScanNewRowEvaluation **()**); 删除它们后,现在可以正常工作。

再次感谢!