2012-02-16 62 views
0

我在使用Telerik网格的MVC3中有一个页面。在网格中,对于每一行,都是一个输入小数点的文本框。我有一个css类'HoursNew',它用于连接一个jQuery插件(autoNumeric.js)。我也有一个onBlur函数来将任何十进制输入舍入到最接近的小数点。 问题是,在对一列进行排序后,所有JavaScript似乎都停止工作。 autoNumeric.js停止与我在blur上触发的函数一起工作。Telerik MVC Grid - 排序停止javascript

$(document).ready(function() { 
    $('.HoursNew').autoNumeric({ pSign: 's', vMin: '-999.5', vMax: '999.5', mRound: 'C', aPad: false }); 
    $('.HoursNew').blur(function() { roundToHalf(this); }); 
}); 

      // Round decimal to nearest .5 
      // v is input object 
      function roundToHalf(v) { 
       var value = v.value; 
       var r; 
       //alert(v.id); 
       var converted = parseFloat(value); // Make sure we have a number 
       var decimal = (converted - parseInt(converted, 10)); // Pull the decimal value 
       decimal = Math.round(decimal * 10); 
       if (decimal == 5) { return (parseInt(converted, 10) + 0.5); } // leave alone if .5 
       if ((decimal < 3) || (decimal > 7)) { 
        r = Math.round(converted); // Round up or down to nearest whole number 
       } else { 
        r = (parseInt(converted, 10) + 0.5); //round to .5 
       } 
       //alert(r); 
       // reset input value to new value 
       $('#' + v.id).val(r); 
      } 

页面在第一次加载时工作正常,排序后只是这个问题。有什么建议么?

回答

1

我有一个预感,当排序时,网格正在进行一个ajax调用,呈现一个新的网格。这意味着您在$(document).ready中执行的任何绑定都将被删除。

Telerik documentation的客户端事件中查看此页面。你需要这部分添加到您的网格的定义:

.ClientEvents(events => events 
    .OnDataBound("onDataBound") 

这javascript来重新绑定:

function onDataBound(e) { 
    $('.HoursNew').autoNumeric({ pSign: 's', vMin: '-999.5', vMax: '999.5', mRound: 'C', aPad: false }); 
    $('.HoursNew').blur(function() { roundToHalf(this); }); 

} 
+0

差不多......我还需要增加整个脚本标签在onDataBound。函数onDataBound(e){document} .ready(function(){('。HoursNew')。autoNumeric({pSign:'s',vMin:'-999.5',vMax:'999.5', mRound:'C',aPad:false}); $('。HoursNew')。blur(function(){roundToHalf(this);}); }); }' – Greg 2012-02-16 23:22:10

+1

...并感谢您的链接。现在很好用。 – Greg 2012-02-16 23:28:27