2

我需要限制文本框上的输入。在页面加载时,转发器中的文本框会自动填充转发器中项目的纸箱数量。我正在使用以下代码在 OnItemCreated 方法中执行此操作:

txt.Text = DataBinder.Eval(e.Item.DataItem, "CtnQty").ToString();

我需要做的是重新输入输入(最好使用 Javascript),这样如果选择的值超过默认值,则该值会自动设置为下一个倍数。如果小于,则接受输入的任何值。因此,例如,如果默认值为 12 并输入 13,则需要将其自动更正为 24。如果输入 11,则该值保持为 11。

我一直在玩 Math.round 函数,如下所示:

<input type="text" onblur="this.value=Math.round(parseInt(this.value)/12)*12" />

但我无法让它接受动态值。这样做会导致“服务器标签格式不正确”解析错误:

<input type="text" onblur="this.value=Math.round(parseInt(this.value)/<%# DataBinder.Eval(Container.DataItem, "CTNQTY") %>)*<%# DataBinder.Eval(Container.DataItem, "CTNQTY") %>" />

然后如果小于默认值,我将遇到接受的问题,如果更多,则乘以。我想我需要一个更详细的 Javascript 函数,但经过多次谷歌搜索后找不到我想要的。任何想法都将受到欢迎。

谢谢

4

2 回答 2

0

首先,我会说使用 DataItem 的代码应该位于 ItemDataBound 中,除非您在每次回发时绑定数据,这并不总是好的做法。

关于格式不正确的标签,您可以尝试这样的事情,对您的 onblur 使用单引号:

<input type="text" onblur='this.value=Math.round(parseInt(this.value)/<%# DataBinder.Eval(Container.DataItem, "CTNQTY") %>)*<%# DataBinder.Eval(Container.DataItem, "CTNQTY") %>' />

关于 js 函数,也许这个例子会有所帮助(顺便说一句:使用 jQuery 等库进行事件处理应该是更好的选择):

http://jsfiddle.net/nqCGp/

<html>
    <body>

      <script>
            function verify(qty){
               return function(event){event.target.value=Math.round(parseInt(event.target.value)/qty)*qty;};
            }
              </script>
      <form>
              <input type='text' onblur="(verify(12))(event)"/>
              <input type='text' onblur="(verify(14))(event)"/>        
      </form>
    </body>
</html>
于 2012-10-25T15:37:15.820 回答
0

这是针对您的问题的 html5 + 纯 javascript 解决方案 - 使用jQuery功能检测进行跨浏览器和处理更改事件的未来兼容性(类似于blur,但只有在某些内容发生更改时,如果用户enter在表单之前按下应该可以工作已提交,但我没有测试)

<input type="number" id="ctnQty" value="14" data-default-value="14">
<script>
    var changeHandler = function(e) {
        var defaultValue = e.target.dataset.defaultValue;
        var v = e.target.value;
        if (v > defaultValue) {
            v = (Math.floor(v / defaultValue) + 1) * defaultValue;
            e.target.value = v;
        };
    };
    document.getElementById("ctnQty").onchange = changeHandler;
</script>

更新:具有可重用函数和局部变量的更通用解决方案

http://jsfiddle.net/Aprillion/CcQ6t/3/

于 2012-10-25T16:24:37.023 回答