我有一个要在某些事件上触发的功能。该函数必须访问事件发生所在元素的“ 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
}
}
}
答案 0 :(得分:0)
感谢大家的答复,您最有帮助!
我需要问的最重要的事情是我从前两个答复中获悉,它们是由SomePerformance和VLAZ提供的。
看来我的错误是我在这里的回调函数后面加上了括号:
$(document).on('focusin','.formInput',FrozenScanNewRowEvaluation **()**);
删除它们后,现在可以正常工作。
再次感谢!