ko.utils.registerEventHandler to native addEventListener

This commit is contained in:
djmaze 2021-09-28 13:38:02 +02:00
parent 8babd10f69
commit 9014f08f35
6 changed files with 16 additions and 14 deletions

View file

@ -18,7 +18,7 @@ ko.bindingHandlers['event'] = {
var eventsToHandle = valueAccessor() || {};
ko.utils.objectForEach(eventsToHandle, eventName => {
if (typeof eventName == "string") {
ko.utils.registerEventHandler(element, eventName, function (event) {
element.addEventListener(eventName, function (event) {
var handlerReturnValue;
var handlerFunction = valueAccessor()[eventName];
if (!handlerFunction)

View file

@ -21,10 +21,13 @@ ko.bindingHandlers['hasfocus'] = {
var handleElementFocusIn = handleElementFocusChange.bind(null, true);
var handleElementFocusOut = handleElementFocusChange.bind(null, false);
ko.utils.registerEventHandler(element, "focus", handleElementFocusIn);
ko.utils.registerEventHandler(element, "focusin", handleElementFocusIn);
ko.utils.registerEventHandler(element, "blur", handleElementFocusOut);
ko.utils.registerEventHandler(element, "focusout", handleElementFocusOut);
var registerEventHandler = (event, handler) =>
element.addEventListener(event, handler);
registerEventHandler("focus", handleElementFocusIn);
registerEventHandler("focusin", handleElementFocusIn);
registerEventHandler("blur", handleElementFocusOut);
registerEventHandler("focusout", handleElementFocusOut);
// Assume element is not focused (prevents "blur" being called initially)
element[hasfocusLastValue] = false;

View file

@ -2,7 +2,7 @@ ko.bindingHandlers['submit'] = {
'init': (element, valueAccessor, allBindings, viewModel, bindingContext) => {
if (typeof valueAccessor() != "function")
throw new Error("The value for a submit binding must be a function");
ko.utils.registerEventHandler(element, "submit", event => {
element.addEventListener("submit", event => {
var handlerReturnValue;
var value = valueAccessor();
try { handlerReturnValue = value.call(bindingContext['$data'], element); }

View file

@ -49,7 +49,7 @@ ko.bindingHandlers['textInput'] = {
};
var onEvent = (event, handler) =>
ko.utils.registerEventHandler(element, event, handler);
element.addEventListener(event, handler);
onEvent('input', updateModel);

View file

@ -12,6 +12,8 @@ ko.bindingHandlers['value'] = {
var eventsToCatch = new Set;
var requestedEventsToCatch = allBindings.get("valueUpdate");
var elementValueBeforeEvent = null;
var registerEventHandler = (event, handler) =>
element.addEventListener(event, handler);
if (requestedEventsToCatch) {
// Allow both individual event names, and arrays of event names
@ -47,9 +49,9 @@ ko.bindingHandlers['value'] = {
elementValueBeforeEvent = ko.selectExtensions.readValue(element);
ko.utils.setTimeout(valueUpdateHandler, 0);
};
eventName = eventName.substring("after".length);
eventName = eventName.substring(5);
}
ko.utils.registerEventHandler(element, eventName, handler);
registerEventHandler(eventName, handler);
});
var updateFromModel;
@ -96,7 +98,7 @@ ko.bindingHandlers['value'] = {
var updateFromModelComputed;
ko.bindingEvent.subscribe(element, ko.bindingEvent.childrenComplete, () => {
if (!updateFromModelComputed) {
ko.utils.registerEventHandler(element, "change", valueUpdateHandler);
registerEventHandler("change", valueUpdateHandler);
updateFromModelComputed = ko.computed(updateFromModel, { disposeWhenNodeIsRemoved: element });
} else if (allBindings.get('valueAllowUnset')) {
updateFromModel();
@ -105,7 +107,7 @@ ko.bindingHandlers['value'] = {
}
}, null, { 'notifyImmediately': true });
} else {
ko.utils.registerEventHandler(element, "change", valueUpdateHandler);
registerEventHandler("change", valueUpdateHandler);
ko.computed(updateFromModel, { disposeWhenNodeIsRemoved: element });
}
},

View file

@ -96,9 +96,6 @@ ko.utils = {
setTimeout: (handler, timeout) => setTimeout(handler, timeout),
registerEventHandler: (element, eventType, handler) =>
element.addEventListener(eventType, handler, false),
triggerEvent: (element, eventType) => {
if (!(element && element.nodeType))
throw new Error("element must be a DOM node when calling triggerEvent");