admin管理员组文章数量:1357405
I am generating circular counters for polls where I draw counter for each answer.
I am using this "plugin": /
Problem:
It is not getting text value from <div>
and not drawing Counter for each div.
Note: For one div is working good
Example:
/
HTML:
<div class="pollAnswerBar">15</div>
<div class="pollAnswerBar">50</div>
<div class="pollAnswerBar">75</div>
JS:
jQuery(document).ready(function() {
function drawCounter(percent) {
jQuery('div.pollAnswerBar').html('<div class="percent"></div><div id="slice"' + (percent > 50 ? ' class="gt50"' : '') + '><div class="pie"></div>' + (percent > 50 ? '<div class="pie fill"></div>' : '') + '</div>');
var deg = 360 / 100 * percent;
jQuery('#slice .pie').css({
'-moz-transform': 'rotate(' + deg + 'deg)',
'-webkit-transform': 'rotate(' + deg + 'deg)',
'-o-transform': 'rotate(' + deg + 'deg)',
'transform': 'rotate(' + deg + 'deg)'
});
jQuery('.percent').html(Math.round(percent) + '%');
}
jQuery('.pollAnswerBar').each(function() {
var percent = jQuery(this).text();
console.log(percent);
drawCounter(percent);
});
});
I am generating circular counters for polls where I draw counter for each answer.
I am using this "plugin": http://blakek.us/labs/jquery/css3-pie-graph-timer/
Problem:
It is not getting text value from <div>
and not drawing Counter for each div.
Note: For one div is working good
Example:
http://jsbin./AHUkoBA/3/edit
http://jsfiddle/mgcq9/
HTML:
<div class="pollAnswerBar">15</div>
<div class="pollAnswerBar">50</div>
<div class="pollAnswerBar">75</div>
JS:
jQuery(document).ready(function() {
function drawCounter(percent) {
jQuery('div.pollAnswerBar').html('<div class="percent"></div><div id="slice"' + (percent > 50 ? ' class="gt50"' : '') + '><div class="pie"></div>' + (percent > 50 ? '<div class="pie fill"></div>' : '') + '</div>');
var deg = 360 / 100 * percent;
jQuery('#slice .pie').css({
'-moz-transform': 'rotate(' + deg + 'deg)',
'-webkit-transform': 'rotate(' + deg + 'deg)',
'-o-transform': 'rotate(' + deg + 'deg)',
'transform': 'rotate(' + deg + 'deg)'
});
jQuery('.percent').html(Math.round(percent) + '%');
}
jQuery('.pollAnswerBar').each(function() {
var percent = jQuery(this).text();
console.log(percent);
drawCounter(percent);
});
});
Share
Improve this question
asked Oct 28, 2013 at 9:10
Ing. Michal HudakIng. Michal Hudak
5,63212 gold badges62 silver badges95 bronze badges
0
3 Answers
Reset to default 4Here is working fiddle: http://jsfiddle/fKPb6/
You were modifying all elements rather than specifying each one individually.
Here is working code.
JS:
jQuery(document).ready(function () {
function drawCounter(percent, element) {
jQuery(element).html('<div class="percent"></div><div id="slice"' + (percent > 50 ? ' class="gt50"' : '') + '><div class="pie"></div>' + (percent > 50 ? '<div class="pie fill"></div>' : '') + '</div>');
var deg = 360 * (percent / 100);
jQuery('#slice .pie', element).css({
'-moz-transform': 'rotate(' + deg + 'deg)',
'-webkit-transform': 'rotate(' + deg + 'deg)',
'-o-transform': 'rotate(' + deg + 'deg)',
'transform': 'rotate(' + deg + 'deg)'
});
jQuery('.percent', element).html(Math.round(percent) + '%');
}
jQuery('.pollAnswerBar').each(function (index, element) {
var percent = jQuery(element).text();
console.log(percent);
drawCounter(percent, element);
});
});
By limiting the selection to the scope of the individual element e.g. jQuery('.percent', element)
you are targeting the correct element rather than all .percent
elements.
You can pass the event handler like this:
// Pass the event handler here
jQuery('.pollAnswerBar').each(drawCounter);
and call the function like:
// Declare the event handler with params passed from .each()
function drawCounter(i, elm) {
var percent = $(elm).text();
jQuery(elm).html('<div class="percent"></div><div id="slice"' + (percent > 50 ? ' class="gt50"' : '') + '><div class="pie"></div>' + (percent > 50 ? '<div class="pie fill"></div>' : '') + '</div>');
var deg = 360 * (percent / 100);
jQuery('#slice .pie', elm).css({
'-moz-transform': 'rotate(' + deg + 'deg)',
'-webkit-transform': 'rotate(' + deg + 'deg)',
'-o-transform': 'rotate(' + deg + 'deg)',
'transform': 'rotate(' + deg + 'deg)'
});
jQuery('.percent', elm).html(Math.round(percent) + '%');
}
Demo: Fiddle
Or only using the this
keyword without any parameters being passed like:
// Pass the event handler here
jQuery('.pollAnswerBar').each(drawCounter);
// Declare the event handler using `this`
function drawCounter() {
var percent = $(this).text();
jQuery(this).html('<div class="percent"></div><div id="slice"' + (percent > 50 ? ' class="gt50"' : '') + '><div class="pie"></div>' + (percent > 50 ? '<div class="pie fill"></div>' : '') + '</div>');
var deg = 360 * (percent / 100);
jQuery('#slice .pie', this).css({
'-moz-transform': 'rotate(' + deg + 'deg)',
'-webkit-transform': 'rotate(' + deg + 'deg)',
'-o-transform': 'rotate(' + deg + 'deg)',
'transform': 'rotate(' + deg + 'deg)'
});
jQuery('.percent', this).html(Math.round(percent) + '%');
}
Demo: Fiddle
You don't need to specify each() function here Try this:
function myfun(){
var percent = jQuery(this).text();
console.log(percent);
drawCounter(percent);
});
jQuery('.pollAnswerBar').myfun();
本文标签: javascriptjQuery each function not working properlyStack Overflow
版权声明:本文标题:javascript - jQuery each function not working properly - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744058915a2583763.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论