2013-04-17 77 views
0

我使用以下来限制文本字段中的值。只有当用户试图删除并留空时,它才会有效。它不会删除最小值。 数量:Javascript最小值和最大值

<input type="text" placeholder="none" name="notepad_and_pen" id="notepad_and_pen" maxlength="10" style="width:50px" tabindex=4 onchange="this.value = (this.value > 999999) ? 999999 : ((this.value < 400) ? 400 : this.value);"> 

我也有在标题为空白文本字段的占位符这个脚本也许这可能会以某种方式影响:

$('input').focus(function(){ 
    $(this).val(''); 
}).blur(function(){ 
    if($(this).val() == "") 
    { 
     $(this).val($(this).attr('placeholder')) 
    } 
} 
); 

请需要帮助。我是一个完全noob,任何你可以教导的将是伟大的。谢谢大家。

+1

你想要它做的事。你正在经历的是剧本正在做什么。 – Botonomous

+0

执行初始检查,然后绑定一个'onChange'事件侦听器。应该做的伎俩。 – 2013-04-17 20:32:14

+0

呵呵?我不明白这一点。请给我30号的小菜。 – user2292469

回答

0

this.value的值是一个字符串。你将它与一个数字进行比较。在比较之前将其转换为一个数字,喜欢的东西:

parseFloat(this.value) 

当然,它可以更容易调试了很多,用,如果你不使用内联事件处理工作。你已经使用jQuery,那么试试这个:

$("#notepad_and_pen").on("change", function() { 
    var $this = $(this), 
     finalValue = $this.val(), 
     myValue = parseFloat(finalValue); 
    if (isNaN(myValue)) { 
     finalValue = ""; 
    } else { 
     if (myValue > 999999) { 
      finalValue = 999999; 
     } else if (myValue <= 0) { 
      finalValue = ""; 
     } else if (myValue < 400) { 
      finalValue = 400; 
     } 
    } 
    $this.val(finalValue); 
}); 

DEMO:上#notepad_and_penhttp://jsfiddle.net/wTKxX/4/

+0

这越来越接近我在找什么。只有我希望在400和999999之间输入任何范围号码。但是,如果用户返回并删除号码,它将回到与位置持有人在一起的空白处。 – user2292469

+0

@ user2292469我很困惑。这正是它所做的。如果你放置的东西低于400,那么它就会变成400.如果你放置高于999999的东西,它会使它成为999999.如果你留下空白或放置一个无效的数字,它会放置'placeholder'。是不是你刚才说?或者你是说如果你把它留空,你希望它是400,而不是'占位符'? – Ian

+0

它很棒!如果可以的话,你如何添加功能,如果用户输入“0”,它会自动变为空白并且占位符? – user2292469

-1

限制可以征收,并删除允许,用一行代码。

This page提供了一种检测占位符是否本机支持(从而避免需要Modernizr)的方法。

this page提供了一种非本地处理占位符的合理方法。

这里的组合代码:

$(function() { 
    //Impose limits on #notepad_and_pen 
    $("#notepad_and_pen").on('change', function() { 
     this.value = (this.value === '') ? '' : Math.max(400, Math.min(999999, Number(this.value))); 
     //Use the following line to reject anything that's zero, blank or not a number, before applying the range limits. 
     //this.value = (!Number(this.value)) ? '' : Math.max(400, Math.min(999999, Number(this.value))); 
    }); 

    //With reference to http://diveintohtml5.info/detect.html 
    function supports_input_placeholder() { 
     var i = document.createElement('input'); 
     return 'placeholder' in i; 
    } 

    //With reference to http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html 
    // 1. Handle placeholders (in non-HTML5 compliant browsers). 
    if(!supports_input_placeholder()) { 
     $('[placeholder]').focus(function() { 
      var input = $(this); 
      if (input.val() == input.attr('placeholder')) { 
       input.val(''); 
       input.removeClass('placeholder'); 
      } 
     }).blur(function() { 
      var input = $(this); 
      if (input.val() == '' || input.val() == input.attr('placeholder')) { 
       input.addClass('placeholder'); 
       input.val(input.attr('placeholder')); 
      } 
     }).blur(); 

     //2. Prevent placeholder values being submitted to form's action script 
     $('[placeholder]').eq(0).closest('form').submit(function() { 
      $(this).find('[placeholder]').each(function() { 
       var input = $(this); 
       if (input.val() == input.attr('placeholder')) { 
        input.val(''); 
       } 
      }); 
     }); 
    } 
}); 
+0

尝试过。它与原来的内联功能完全相同。当我输入一个数字时,它会检测到低位和高位范围内的数字,如果低于下限,则强制使用下限。但是,当我尝试返回并删除条目时,它会强制到下限而不是删除并且与地方持有人留下空白。 – user2292469

+0

哎呀,对不起,我简化了范围检查并忘记了解决这个问题。回答编辑。 –

+0

iThis也很棒!如果可以的话,你如何添加功能,如果用户输入“0”,它会自动变为空白并且占位符? – user2292469