gpt4 book ai didi

javascript - 为什么更改事件不会在 selector.val(1234) 上触发?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:28:08 26 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
jQuery textbox.val('xxxx') not causing change to fire?

我有一个插件应该在更新“选择器”的值时触发。在正常的 UI 交互过程中,它像冠军一样工作。但是,如果“选择器”是通过 JavaScript 或 jQuery 更新的,它不会触发。

  • 直接通过文本框更新...有效
  • 按下按钮...失败
  • 使用对 selected.val(xxx) 的 jQuery 调用进行更新...失败

该插件的总体思路是在网格和面板等内容中自动舍入总计。

任何帮助都会很棒......我整天都在努力解决这个问题!

给定以下 HTML:

<input id="myDecimalTotal" type="text" value="0.00" class="rounder-decimal" />
<input id="btnDecimalTotalTest" type="button" value="Run Total" />

使用以下选择器和 JavaScript 进行测试:

jQuery(document).ready(function() {
jQuery('input.rounder-decimal').numericRounder();
jQuery('#btnDecimalTotalTest').click(overwriteDecimalTotal); // fails
jQuery('#myDecimalTotal').val(777); // fails
});

function overwriteDecimalTotal() {
jQuery('#myDecimalTotal').val(123);
}

对于以下插件:

(function($) {
$.fn.numericRounder = function(options) {

switch (typeof (options)) {
case 'object':
options = $.extend({}, $.fn.numericRounder.defaults, options);
break;
case 'string':
options = $.extend({}, $.fn.numericRounder.defaults, { onEvent: options });
break;
default:
options = $.fn.numericRounder.defaults;
}

return this.each(function() {

var element = $(this);

if (element.is('input.rounder-decimal')) {
switch (options.onEvent) {
case 'change':
element.change(roundDecimal);
break;
case 'blur':
element.blur(roundDecimal);
break;
case 'click':
element.click(roundDecimal);
break;
default:
element.blur(roundDecimal);
}
}

if (element.is('input.rounder-wholeNumber')) {
switch (options.onEvent) {
case 'change':
element.change(function() { roundWholeNumber(this, options.factorOf); });
break;
case 'blur':
element.blur(function() { roundWholeNumber(this, options.factorOf); });
break;
case 'click':
element.click(function() { roundWholeNumber(this, options.factorOf); });
break;
default:
element.blur(function() { roundWholeNumber(this, options.factorOf); });
}
}

/// <summary>Rounds a numeric value to the nearest place.</summary>
function roundDecimal() {

var value = $(this).val();
value = extractValue(value);

if (isNaN(value))
value = $(this).val();
else
value = Math.round(value).toFixed(2);

$(this).val(value);
}
/// <summary>Rounds a numeric value to the nearest place.</summary>
function roundWholeNumber(element, factorOf) {

var value = $(element).val();
value = extractValue(value);

if (isNaN(value))
value = $(element).val();
else
value = Math.round(value / factorOf) * factorOf;

$(element).val(value);
}
/// <summary>Extracts the number.</summary>
function extractValue(value) {
var numericRegEx = /([\d\.])/g;

try {
return value.match(numericRegEx).join('');
}
catch (error) {
return value;
}
}
});
};

/// <summary>Default options.</summary>
$.fn.numericRounder.defaults = { onEvent: 'change', factorOf: 10 };
})(jQuery);

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com