Как правильно отправить объект this в функцию - PullRequest
0 голосов
/ 15 октября 2019

У меня есть функция, которую я хочу вызвать при определенных событиях. Эта функция должна получить доступ к объекту "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
}

Должен ли этот подход действительно работать, и я делаю что-то еще не так, или передаю "это", как этот вздор? Спасибо

Редактировать: Вся моя функция: 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 голосов
/ 15 октября 2019

Спасибо всем за ответы, вы были самыми полезными!

Самые важные вещи, которые мне нужно было спросить, я узнал из первых двух ответов CertainPerformance и VLAZ. Похоже, что моя ошибка заключалась в том, что я поставил здесь скобки за функцией обратного вызова:
$ (document) .on ('focusin', '.formInput', freezingScanNewRowEvaluation ** () **);После удаления их теперь работает нормально.

Еще раз спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...