PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.87
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.87
51.1.87 51.1.86 51.1.84 51.1.85 51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 All 41 releases
← All changes | includes/widgets/Pricing_Slider/script.js +28 -0 51.1.85 → 51.1.87 View file →
@@ -54,8 +54,30 @@
54 54
55 55 // Execute once when script loads
56 56 addBasicNotificationCSS();
57 57
58 + /**
59 + * Native range inputs cannot land on max when (max-min) is not a multiple
60 + * of step (min=1, max=1000, step=10 stops at 991). Use a 1-unit step so
61 + * the labeled maximum is a legal value. The visible min/max labels stay
62 + * as configured in the widget.
63 + */
64 + function alignRangeToLabeledMax(input) {
65 + if (!input) {
66 + return;
67 + }
68 + var min = parseFloat(input.min);
69 + var max = parseFloat(input.max);
70 + var step = parseFloat(input.step);
71 + if (isNaN(min) || isNaN(max) || isNaN(step) || step <= 0) {
72 + return;
73 + }
74 + if (((max - min) % step) === 0) {
75 + return;
76 + }
77 + input.step = '1';
78 + }
79 +
58 80 // --- Shared Helper Functions --- (Moved here)
59 81
60 82 /**
61 83 * Calculates the price based on the value and formula settings.
@@ -302,8 +324,10 @@
302 324 defaultValue = Math.max(minValue, Math.min(maxValue, defaultValue));
303 325 if (parseFloat(rangeInput.val()) !== defaultValue) {
304 326 rangeInput.val(defaultValue); // Ensure input value matches calculated default
305 327 }
328 + alignRangeToLabeledMax(rangeInput.get(0));
329 + defaultValue = parseFloat(rangeInput.val());
306 330
307 331 /**
308 332 * Updates the price display, button link (if applicable), and features for the single slider.
309 333 */
@@ -362,8 +386,9 @@
362 386
363 387 // --- Event Listener ---
364 388 // Ensure previous listeners are removed before adding new ones (important for editor)
365 389 rangeInput.off('.pricingSlider').on('input.pricingSlider change.pricingSlider', function() {
390 + alignRangeToLabeledMax(this);
366 391 var value = parseFloat($(this).val());
367 392 sharedUpdateSliderUI(sliderWrapper, value); // Update slider UI visuals
368 393 updateDisplay(); // Update price, button, features based on new value
369 394 });
@@ -496,8 +521,10 @@
496 521
497 522 if (parseFloat(rangeInput.val()) !== defaultValue) {
498 523 rangeInput.val(defaultValue); // Set initial value correctly
499 524 }
525 + alignRangeToLabeledMax(rangeInput.get(0));
526 + defaultValue = parseFloat(rangeInput.val());
500 527 sharedUpdateSliderUI(singleSliderWrapper, defaultValue); // Use shared function
501 528 });
502 529 // Update the combined display based on initial values
503 530 updateCombinedDisplayForMulti();
@@ -507,8 +534,9 @@
507 534 slidersContainer.off('.pricingSlider', '.king-addons-pricing-slider__range');
508 535 // Add new delegated listener
509 536 slidersContainer.on('input.pricingSlider change.pricingSlider', '.king-addons-pricing-slider__range', function() {
510 537 var rangeInput = $(this); // The input that triggered the event
538 + alignRangeToLabeledMax(this);
511 539 var singleSliderWrapper = rangeInput.closest('.king-addons-single-slider');
512 540 var value = parseFloat(rangeInput.val());
513 541
514 542 // Log for debugging multi-slider events