javascript - How to change progress bar with creating dynamic checkboxes -
i have looked on , found many similar threads, none of them answered question specific situation:
i want to, when visitor creates dynamic checkbox, visitor checks or unchecks checkbox increase or decrease value shown on progress bar. in addition want show percent of progress bar. this: image
here demo
here code: html:
<div id="cblist"></div> <input type="text" id="checkboxname" /> <input type="button" value="ok" id="btnsavecheckbox" /> <div id="progressbar"></div> <br/>
jquery:
$(document).ready(function () { $('#btnsavecheckbox').click(function () { addcheckbox($('#checkboxname').val()); $('#checkboxname').val(""); }); $(function () { $("#progressbar").progressbar({ value: 0, max: 100 }); }); }); function addcheckbox(name) { var container = $('#cblist'); var inputs = container.find('input'); var id = inputs.length + 1; $('<input />', { type: 'checkbox', id: 'cb' + id, value: name }).appendto(container); $('<label />', { 'for': 'cb' + id, text: name }).appendto(container); $('<br/>').appendto(container); }
please !!!!
you need add handler page determine when checkbox
has been checked / unchecked.
to can use delegate event handler, or assign event handler manually when create checkbox.
this first example showing using delegated event handler :
code :
$(document).ready(function() { $('#btnsavecheckbox').click(function() { addcheckbox($('#checkboxname').val()); $('#checkboxname').val(""); }); $(document).on('change', 'input[type="checkbox"]', updateprogress); $("#progressbar").progressbar({ value: 0, max: 100 }); }); function updateprogress() { var numall = $('input[type="checkbox"]').length; var numchecked = $('input[type="checkbox"]:checked').length; if (numall > 0) { var perc = (numchecked / numall) * 100; $("#progressbar").progressbar("value", perc); } } function addcheckbox(name) { var container = $('#cblist'); var inputs = container.find('input'); var id = inputs.length+1; $('<input />', { type: 'checkbox', id: 'cb'+id, value: name }).appendto(container); $('<label />', { 'for': 'cb'+id, text: name }).appendto(container); $('<br/>').appendto(container); updateprogress(); }
the changes made code addition of updateprogress();
function, looks checkboxes on page , determines percentage of them have been checked, update progress bar value.
also call updateprogress
function @ end of addcheckbox
function, re-calculate percentage done when new elements added.
and following line of code in document.ready handler :
$(document).on('change', 'input[type="checkbox"]', updateprogress);
this line of code creates delegate event handler monitor checkboxes on page, , may added in future determine when have been changed, , when have execute updateprogress
function.
by manually assigning event handler on creation :
if don't want use delegated event handler , want use direct event handler, can following.
change line creates checkbox
in addcheckbox
function following :
$('<input />', { type: 'checkbox', id: 'cb'+id, value: name }).appendto(container).change(updateprogress);
this adds event handler change
event of element , calls updateprogress
function.
to display value on progress bar : see answer
basically when set value of progress bar (in updateprogress
function) change line following :
$("#progressbar").progressbar("value", perc) .children('.ui-progressbar-value') .html(perc.toprecision(3) + '%') .css("display", "block");
this display value in progress bar. can format text using following css :
.ui-progressbar-value { font-size: 13px; font-weight: normal; line-height: 18px; text-align:center; }
Comments
Post a Comment