Хорошо, у меня та же проблема, и вот мои выводы:
Первый источник -1.7976931348623157E+308
. Он равен свойству Minimum
AjaxControlToolkit.NumericUpDownBehavior
, которое вызывается в одном из обработчиков Sys.Application.init :
Sys.Application.add_init(function() {
$create(AjaxControlToolkit.NumericUpDownBehavior, {"Maximum":1.7976931348623157E+308,"Minimum":-1.7976931348623157E+308, /* other non relevant stuff */);
});
Итак, никакой магии здесь нет, просто минимальное значение Double
. Minimum
- это новое свойство по сравнению с версией 10618.
Далее, почему оно отображается, как только отображается страница? Это происходит потому, что внутри readValue
функции, определенной в AjaxControlToolkit.NumericUpDownBehavior.prototype
, значение this._min
(равное Minimum
параметру из $create
) назначается на вход, если оно пустое. readValue
источники:
readValue : function() {
/// <summary>
/// Parse value of textbox and this._currentValue to be that value.
/// this._currentValue = this._min if some there is an exception
/// when attempting to parse.
/// Parse int or string element of RefValues
/// </summary>
if (this._elementTextBox) {
var v = this._elementTextBox.value;
// The _currentValue of NumericUpDown is calculated here
// if textbox empty this._currentValue = this._min
if(!this._refValuesValue) {
if(!v) {
this._currentValue = this._min;
} else {
try {
this._currentValue = parseFloat(v);
} catch(ex) {
this._currentValue = this._min;
}
}
if(isNaN(this._currentValue)) {
this._currentValue = this._min;
}
// And assigned here. In case of empty input we will get -1.7976931348623157E+308 if Minimum was not changed
this.setCurrentToTextBox(this._currentValue);
this._valuePrecision = this._computePrecision(this._currentValue);
} else {
if(!v) {
this._currentValue = 0;
} else {
var find = 0;
for (var i = 0; i < this._refValuesValue.length; i++) {
if (v.toLowerCase() == this._refValuesValue[i].toLowerCase()) {
find = i;
}
}
this._currentValue = find;
}
this.setCurrentToTextBox(this._refValuesValue[this._currentValue]);
}
}
}
До Minimum
, в версии 10618 значение по умолчанию было 0
. Поэтому я думаю, что описанную проблему можно решить, указав Minimum
значение явно в объявлении расширителя:
<ajaxToolkit:NumericUpDownExtender ID="NumericExtenderFooNum" runat="server"
Minimum="0"
TargetControlID="txtFooNum"
TargetButtonDownID="FooBack" TargetButtonUpID
Еще одна вещь, которую я обнаружил, заключается в том, что change
диспетчеризация событий работает неправильно в новых версиях IE (чтобы она работала, должно быть включено представление совместимости, но я думаю, что это не вариант для общедоступных веб-сайтов). *
Проблема в функции setCurrentToTextBox
. event
объект всегда null
в обработчиках (например, в обработчиках валидации), если он создан с использованием document.createEvent . Чтобы решить эту проблему, условие должно быть поменяно местами, поэтому все события в IE будут создаваться с использованием createEventObject .
// Current implementation of version 20229
setCurrentToTextBox : function(value) {
// full sources are not shown, only if matters here
if (document.createEvent) {
// event is created using createEvent
} else if( document.createEventObject ) {
// event is created using createEventObject
}
}
}
// Updated implementation
setCurrentToTextBox : function(value) {
// full sources are not shown, only if matters here
if (document.createEventObject) {
// event is created using createEventObject
} else if(document.createEvent) {
// event is created using createEvent
}
}
}