javascript - Varför ser inte jQuery händelser i min TS-konstruktörsklass
Jag har ett TS-script, detta är en kombinatorik för mitt studietema.
Jag inkluderar jQuery för att förenkla hanteringen av DOM-händelser.
I npm installerade jag alla beroenden, byggnaden är okej - inga fel.
main.ts
import * as $ from 'jquery';
import {Totalizator} from "./totalizator/totalizator";
$(() => {
new Totalizator($('#totalizator'), 42, 5);
});
totalisator.ts
import * as $ from 'jquery';
const classes = {
number: 'number'
};
const selectors = {
number: `.${classes.number}`,
numbersTable: '#totalizatorNumbersTable',
chosenNumbersTable: '#totalizatorChosenNumbersTable'
};
export class Totalizator {
private $container: JQuery;
private readonly numbers: number;
private readonly choices: number;
constructor($container: JQuery, numbers: number, choices: number) {
this.$container = $container;
this.numbers = numbers;
this.choices = choices;
this.printNumbersTable();
this.printChosenNumbersTable();
// this is working, I can see on console, there is a jQuery object
console.log(this.$container);
// but this is not working
$(this.$container).on(`${selectors.numbersTable} ${classes.number}`, 'click', (event) => {
console.log(event);
});
}
}
När jag klickar på "numret" borde ett evenemang utlösas, varför gör det inte det?
Observera: totalizator.ts är förenklad. Jag inkluderar endast konstruktorn, resten av koden är inte viktig, bara HTML-utskrift.
Grundläggande jQuery kommer att se ut så här, men i min TS fungerar det inte, vad jag än skriver:
$('#totalizator').on('#totalizatorNumbersTable .number', 'click', (event) => {
console.log(event);
});
Svar #1
Du använder classes.number i din mallsträngsinterpolering, vars värde är "number", medan du istället borde ha använt din variabel selectors.number, som lägger till punkten (.) för att konvertera det till en CSS-klassselektor (.$ {classes.number})
Nästa, syntaxen för jQuery .on-metoden är .on( events [, selector ] [, data ], handler ), det vill säga händelsenamnet först, och selektorn (för händelsedelegering) därefter.
Därför bör du i ditt fall ha:
$(this.$container).on('click', `${selectors.numbersTable} ${selectors.number}`, (event) => {
console.log(event);
});
// Equivalent to:
$('#totalizator').on('click', '#totalizatorNumbersTable .number', (event) => {
console.log(event);
});
