2015-03-10 4 views
1

Так я линияметод IndexOf в JavaScript

var a = document.cardform.cardnumber.value.toString;

Тогда позже:

else if (a.indexOf(' ')!=0 ||a.indexOf('+')!=0 || a.indexOf('-')!=0){ 

Это проверяет, что пользователь не ввел любой нежелательный + s, -'s, или 's. Линия, кажется, поднимает ошибку, которая выглядит следующим образом:

Uncaught TypeError: undefined is not a function.

Я смущен относительно того, что он мне говорил. Говорит ли это, что undefined не является функцией, или что 'a' является несовместимым типом данных? Как исправить эту проблему?

+2

Это вам говорить, что функция 'String.prototype.toString' не имеет' indexOf' свойство. –

+2

'toString' - это функция, но в любом случае' значение' уже является строкой. – elclanrs

+0

Также вы, вероятно, хотите проверить, возвращает ли indexOf -1. Он вернет 0, если этот символ является первым символом в строке (при условии, что вы на самом деле вызываете 'toString'). –

ответ

2

Необходимо на самом деле вызвать функцию toString().

var a = document.cardform.cardnumber.value.toString(); 

Теперь a является строкой и имеет метод .indexOf()

+0

Спасибо! Теперь я чувствую себя глупо, потратил 30 минут, и все это был набор круглых скобок ... –

+0

Нет проблем, но, как отмечали другие, при получении значения поля ввода вам не нужно вызывать 'toString()' функция. – Adjit

1

Если вы действительно хотите использовать toString метод, то вам нужно вызвать его, в противном случае a это функция, которая не имеет никакого indexOf метод.

Но вам действительно не нужно это делать, потому что document.cardform.cardnumber.value уже является строкой. Помните, что значения элементов формы всегда являются строками.

Наконец, вы можете сделать чек гораздо проще с основным регулярным выражением:

else if (/[-+\s]/.test(a)) { 
Смежные вопросы