1

I have created an onclick function for a button that will create an input box along with another button.

For the first button I have created the function in typescript and within it I have created a create element for the input box and the button.

When I click the first button, I am supposed to get an input box and a button next to it. When I provide an input and click the button, I want to display its value. But, I am unable to use the onclick function for the second button.

Here's the typescript code,

var Id: HTMLInputElement = <HTMLInputElement>document.getElementById("Id")

function getModels() {
    let quantity:HTMLInputElement=<HTMLInputElement>document.createElement("input");
    quantity.type = "number"
    quantity.id = "quan"
    document.body.appendChild(quantity)

    var getQuantity:HTMLInputElement=<HTMLInputElement>document.getElementById("quan");
    var btn:HTMLButtonElement=<HTMLButtonElement>document.createElement("button");
    btn.onclick="getquantity()"

    Display.innerHTML += getQuantity 
}

The onclick function couldn't be added like that. I am getting an Error:Type 'string' is not assignable to type '(this: GlobalEventHandlers, ev: MouseEvent) => any'.

Here's the HTML code,

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="car.js" defer></script>
    <title>Car Dealer</title>
</head>
<body>
    <input type="number" name="Enter Id" id="Id">
    <button onclick="getModels()" value="Get Models" >Get Models</button>
    <br/>
    <p id="display"></p>
</body>
</html>

How am I supposed to use the onclick function for the second button?

2 Answers 2

1

onclick is an event handler which passes a single argument event. Inline event listeners are not good coding practice as it mixes your presentation with your logic. Try updating your code separating out the listener.

Example #1

let btn:HTMLButtonElement=<HTMLButtonElement>document.createElement("button");
btn.addEventListener('click', (e:Event) => getQuantity());

Example #2

<button id='btn-models' value="Get Models" >Get Models</button>

then in your .TS

document.querySelector('#btn-models').addEventListener('click', (e:Event) => getModels());
Sign up to request clarification or add additional context in comments.

Comments

0

It's expecting a callback function, not a string. Assuming getquantity() is an existing function, just change this line:

btn.onclick="getquantity()"

to this:

btn.onclick = getquantity;

1 Comment

it is getting an error, Type 'HTMLInputElement' is not assignable to type '(this: GlobalEventHandlers, ev: MouseEvent) => any'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.