Javascript 单击initilazion上的Listener,但不工作
我正在学习javaScript/jQuery,我想做的就是使用一个循环在屏幕上放置一些图片,并设置一个计数器,每次单击图片时计数器都会增加。 从其他stackoverflow问题中,我了解到对于动态添加的DOM元素,我不能使用jQuery的.click(),而应该使用.on('click','selector','function')。但这并不能解决问题 对我来说,listner中的代码被执行一次(即,每只狗的计数器设置为1),然后点击图片产生:Javascript 单击initilazion上的Listener,但不工作,javascript,jquery,Javascript,Jquery,我正在学习javaScript/jQuery,我想做的就是使用一个循环在屏幕上放置一些图片,并设置一个计数器,每次单击图片时计数器都会增加。 从其他stackoverflow问题中,我了解到对于动态添加的DOM元素,我不能使用jQuery的.click(),而应该使用.on('click','selector','function')。但这并不能解决问题 对我来说,listner中的代码被执行一次(即,每只狗的计数器设置为1),然后点击图片产生: jquery.min.js:3 Uncaught
jquery.min.js:3 Uncaught TypeError: ((n.event.special[g.origType] || (intermediate value)).handle || g.handler).apply is not a function
at HTMLDivElement.dispatch (jquery.min.js:3)
at HTMLDivElement.r.handle (jquery.min.js:3)
这是我的密码:
我特别感兴趣/提及这一部分:
// add a click counter to the click-per-dog-array
// initialize array element
clicksPerDog[i] = 0;
idString = "#"+wugel;
// create listener
$('#dogsWrapper').on('click',idString,function(j,fidString){
console.log("the j passed to the function is: "+j.toString());
//increase click counter
clicksPerDog[j]++;
// update text
$(fidString).text('This dog has been clicked: '+clicksPerDog[j].toString()+" times.");
}(i,idString));
对于那些感兴趣的人,以下是整个shebang:
/*
*
* Click counter practice
*
*/
// HTML bits and variables to reuse for each dog
var HTMLDogContainer= "<div id='%dogname%' class='dogcontainer'></div>";
var HTMLDogName = "<h1 >%dogname%</h1>";
var HTMLDogImage = '<img src="resources/%dogname%.jpg" alt="%dogname%" class="dogpic">';
var HTMLCounterText ='<div class="counterText" id="%idtext%"> This dog has not been clicked yet. Counter is %numberClick%.</div>';
var HTMLDogButton ='<button type="button" class="btn btn-primary">%dogname%</button>';
var dogNames = ["Bonzo","Fox","Jimbo","Larry","Mike"];
console.log("dogNames length is this: "+dogNames.length.toString());
var clicksPerDog = [];
var tmpDogContainer, tmpDogName, tmpDogImage, tmpCounterText, tmpDogButton, tmpIdString;
// Let's loop over the dogs in our array and create the elements
for (var i = 0; i < dogNames.length; i++) { // The number, when thinking 1-indexed, we're on is simply i+1
// Create a div containing the whole shebang for each dogs
tmpDogContainer = HTMLDogContainer.replace('%dogname%', dogNames[i]);
tmpIdString = '#' + dogNames[i]; // Make it identifiable in this loop for jQuery ID Selector purposes
console.log('tmpIdString: ' + tmpIdString);
$('#dogsWrapper').append(tmpDogContainer); // append it to the DOM
// create content for the dog and append it to its respective wrapper
tmpDogName = HTMLDogName.replace('%dogname%', dogNames[i]); // header with dogname
$(tmpIdString).append(tmpDogName);
tmpDogImage = HTMLDogImage.replace('%dogname%', dogNames[i]); //image
$(tmpIdString).append(tmpDogImage);
tmpCounterText = HTMLCounterText.replace('%numberClick%', '0'); //counter
var wugel = dogNames[i].toString() + "counter";
tmpCounterText = tmpCounterText.replace('%idtext%', wugel); //counter
$(tmpIdString).append(tmpCounterText);
// create a button for the dog
tmpDogButton = HTMLDogButton.replace('%dogname%', dogNames[i]);
$('#dogSelector').append(tmpDogButton); // append it to the DOM
// add a click counter to the click-per-dog-array
// initialize array element
clicksPerDog[i] = 0;
idString = "#"+wugel;
// create listener
$('#dogsWrapper').on('click',idString,function(j,fidString){
console.log("the j passed to the function is: "+j.toString());
//increase click counter
clicksPerDog[j]++;
// update text
$(fidString).text('This dog has been clicked: '+clicksPerDog[j].toString()+" times.");
}(i,idString));
}
/*
*
*点击柜台练习
*
*/
//为每只狗重复使用的HTML位和变量
var htmldocontainer=“”;
var HTMLDogName=“%dogname%”;
var HTMLDogImage='';
var HTMLCounterText='此狗尚未被单击。计数器为%numberClick%;
var HTMLDogButton='%dogname%';
var dogNames=[“邦佐”、“福克斯”、“吉姆博”、“拉里”、“迈克”];
log(“dogNames长度是:”+dogNames.length.toString());
var clicksPerDog=[];
var tmpDogContainer、tmpDogName、tmpDogImage、tmpCounterText、tmpDogButton、tmpIdString;
//让我们在数组中循环狗并创建元素
对于(var i=0;i
对于此HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Doggo</title>
<!-- Latest compiled and minified Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- My own CSS -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<div id="dogsWrapper">
</div>
<div class="dog-selection-area">
<p>Select the dog you would like to click:</p>
<div id="dogSelector" class="btn-group">
</div>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!-- Latest compiled and minified Bootstrap JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="js/skript.js"></script>
</body>
</html>
狗狗
选择要单击的狗:
看看这个示例实现。
点击“此狗尚未点击”,增加点击次数。
将其视为进一步进行更改的方向
需要注意的几件事:
$(文档).ready(函数(){
//为每只狗重复使用的HTML位和变量
var htmldocontainer=“”;
var HTMLDogName=“%dogname%”;
var HTMLDogImage='';
var HTMLCounterText='此狗尚未被单击。计数器为%numberClick%';
var HTMLDogButton='%dogname%';
var dogNames=[“邦佐”、“福克斯”、“吉姆博”、“拉里”、“迈克”];
//log(“dogNames长度是:”+dogNames.length.toString());
//var clicksPerDog=[];
var tmpDogContainer、tmpDogName、tmpDogImage、tmpCounterText、tmpDogButton、tmpIdString;
//让我们在数组中循环狗并创建元素
对于(var i=0;i