2016-05-03 1 views
2
<input type="text" name="quantity"> 

Я хочу, чтобы это число (позволяет 0-9 и -), это мой код:Ошибка: JavaScript ключ в недопустимом формате целого

function update_quantity() { 
    $(this).val($(this).val().replace(/[^-?\d]/g, '')); 
} 
$(document).on("change, keyup", "input[type=text])", update_quantity); 

Ex:

123 -> valid 
-123 -> valid 
123- -> invalid 
-1-12-123 -> invalid 
-123-12 -> invalid 

-> ошибка не может быть заменена автоматически -123-12 до -12312 или от 123 до 123, как ее исправить

+0

Что вы пытаетесь сделать? – Richard

+0

В javascript есть синтаксические ошибки. Что такое ожидаемый результат? Вы хотите включить '?' В качестве принятого ввода? – guest271314

+0

Действительно ли '123 ---' действительный ввод? – guest271314

ответ

2

Это, кажется, что вы ищете:

https://jsfiddle.net/7vywp5nn/1/

$(document).ready(function() { 
    $('input[name=quantity]').on('keyup',function() { 
    var v = $(this).val(); 
    if (!v.match(/^-?[0-9]*$/)) 
     $(this).val(v.replace(/(?!^-)[^0-9]/g,'')); 
    }); 
}); 

Хотя я бы лично это сделать на change или blur вместо отгонке пользователя входит. Или еще лучше, вернуть видимую ошибку и предотвратить отправку формы, а не автоматическую замену. Я действительно ненавижу поля формы, которые делают такие вещи. Делает для плохой UX IMO.

1

I want this is a number(allow 0-9 and -)

123--- invalid! But -123 is valid

Примечание, RegExp/[^-?\d]/g разрешает ? персонаж. Если ожидаемый результат, чтобы 0-9 и - в качестве первого символа, вы можете использовать [^\d+] без ? характера, если значение .length является 1 и значения по индексу 0 является - возвращаемым значением по индексу 0 concatented на оставшуюся часть стоимости с использованием .slice() с параметром 1, заменяя символы которые не являются - или \d+, иначе заменить - символы в конце ввода с помощью /(-)$/g

$(document).on("change, keyup", "input[type=text])", update_quantity);

C omma на "change, keyup" и дополнительно ) на селекторе "input[type=text])" можно снять.

function update_quantity() { 
 
    $(this).val(function(_, val) { 
 
     return val.length === 1 && val[0] === "-" 
 
      ? val[0] + val.slice(1).replace(/[^\d+]/g, "") 
 
      : val.replace(/(-)$/g, "") 
 
    }); 
 
} 
 
$(document).on("change keyup", "input[type=text]", update_quantity);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
 
</script> 
 
<input type="text" name="quantity">

Смежные вопросы