在更改之前,我正在使用焦点事件来保存输入值。
onfocus="saveTemp(this);"
在saveTemp中
function saveTemp(item)
{
tempVal = item.value;
}
没什么特别的......
在我的chrome 49.0.2623.112 m(64位)中,一切都很完美。在输入处单击鼠标,它将保存该值。但是使用Firefox它有错误。
当我在输入中直接点击Firefox中的数字时,它会很好地聚焦。但是当我在上一次点击后立即点击填充区域中的另一个输入时,它会在前一个输入上调用焦点事件。因此它节省了不同输入的值。
接下来我意识到,当我在输入的填充中点击干净页面加载后,它会在Firefox中调用onchange事件。
我有Firefox 46.0.1
是错误还是功能?我怎么能反对呢?
编辑:
正如我所说,尽管我在Razor View和WebGrid中生成HTML代码,代码并没有什么特别之处。由于页面中有多个选项卡,因此使用了idPrefix。
new WebGridColumn{
Header="Price",
Format = @<text>
<input type="number" id="@(Model.idPrefix + "InPrice_" + item.pk_id)" value="@item.price" placeholder="Price" onfocus="@(Model.idPrefix)saveTemp(this);" onchange="@(Model.idPrefix)reSum1(this);" />
</text>
},
和JS代码
var @(Model.idPrefix)oldPrice;
function @(Model.idPrefix + "reSum1")(item)
{
if(item.value == "")
item.value = 0;
if(@(Model.idPrefix + "oldPrice") == "")
@(Model.idPrefix + "oldPrice") = 0;
$("#@(Model.idPrefix)LblSumPrice")[0].innerHTML = parseFloat($("#@(Model.idPrefix)LblSumPrice")[0].innerHTML) - parseFloat(@(Model.idPrefix + "oldPrice")) + parseFloat(item.value);
@(Model.idPrefix + "oldPrice") = item.value;
}
function @(Model.idPrefix + "saveTemp")(item)
{
@(Model.idPrefix + "oldPrice") = item.value;
}
生成的专栏:
<td>
<input type="number" id="INV_InPrice_4194" value="0" placeholder="Price" onfocus="INV_saveTemp(this);" onchange="INV_reSum1(this);">
</td>
生成的功能:
var INV_oldPrice;
function INV_saveTemp(item)
{
INV_oldPrice = item.value;
}
function INV_reSum1(item)
{
if(item.value == "")
item.value = 0;
if(INV_oldPrice == "")
INV_oldPrice = 0;
$("#INV_LblSumPrice")[0].innerHTML = parseFloat($("#INV_LblSumPrice")[0].innerHTML) - parseFloat(INV_oldPrice) + parseFloat(item.value);
INV_oldPrice = item.value;
}
正如我所说,所有代码都生成正常并在chrome中正常工作。 IE无法找到生成的JS函数,但它可能针对不同的主题。