简体   繁体   中英

Click event not triggering when passing function with argument

Can anybody tell me why this click event won't trigger? The function seems to work fine (except printing out to HTML but I'll come back to that).

 function longestWordFunc(stringArg) { console.log(stringArg) var stringSplit = stringArg.split(" "); console.log(stringSplit) var longestWord = 0; for(var i = 0; i < stringSplit.length; i++){ if(stringSplit[i].length > longestWord){ longestWord = stringSplit[i].length; } longestWord = stringSplit[i]; }; console.log(longestWord) console.log(longestWord.length) document.getElementsByClassName("longestWord").innerHTML = longestWord; document.getElementsByClassName("longestWordCount").innerHTML = longestWord.length; }; let searchString = document.querySelector(".searchString").value; console.log(searchString); document.querySelector(".generate").addEventListener("click", longestWordFunc(searchString));
 <input type="text" name="searchString" class="searchString"> <span class="longestWord"></span> <span class="longestWordCount"></span> <button class="generate">Generate</button>

Thank you in advance.

You should define searchString inside the event listener of .generate . Unless, your searchString would be undefined as the user hasn't entered any string initially.

 function longestWordFunc(stringArg) { console.log(stringArg) var stringSplit = stringArg.split(" "); console.log(stringSplit) var longestWord = 0; for(var i = 0; i < stringSplit.length; i++){ if(stringSplit[i].length > longestWord){ longestWord = stringSplit[i].length; } longestWord = stringSplit[i]; }; console.log(longestWord) console.log(longestWord.length) document.getElementsByClassName("longestWord").innerHTML = longestWord; document.getElementsByClassName("longestWordCount").innerHTML = longestWord.length; }; document.querySelector(".generate").addEventListener("click", () => { let searchString = document.querySelector(".searchString").value; longestWordFunc(searchString); });
 <input type="text" name="searchString" class="searchString"> <span class="longestWord"></span> <span class="longestWordCount"></span> <button class="generate">Generate</button>

longestWordFunc(searchString) returns undefined , so this line:

document.querySelector(".generate").addEventListener("click", longestWordFunc(searchString));

is getting evaluated as:

document.querySelector(".generate").addEventListener("click", undefined);

And you're not setting anything as the click event listener.

I've fixed your snippet to work below:

 function longestWordFunc() { let stringArg = document.querySelector(".searchString").value; console.log(stringArg); var stringSplit = stringArg.split(" "); console.log(stringSplit); var longestWord = 0; for(var i = 0; i < stringSplit.length; i++){ if(stringSplit[i].length > longestWord){ longestWord = stringSplit[i].length; } longestWord = stringSplit[i]; }; console.log(longestWord); console.log(longestWord.length); document.getElementsByClassName("longestWord").innerHTML = longestWord; document.getElementsByClassName("longestWordCount").innerHTML = longestWord.length; }; document.querySelector(".generate").addEventListener("click", longestWordFunc);
 <input type="text" name="searchString" class="searchString"> <span class="longestWord"></span> <span class="longestWordCount"></span> <button class="generate">Generate</button>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM