2016-09-16 4 views
-1

Я пытаюсь повторно использовать функцию, и я определяю переменную, которая нарушает функцию при попытке разместить ее внутри indexOf(). Я пробовал несколько приближений, но я не могу понять, почему он не работает. Код выглядит так:переменная javascript внутри indexOf

function toggleSelectAll(control, nadaValue) { 
var allOptionIsSelected = (control.val() || []).indexOf('"' + nadaValue + '"') > -1; 

В случае функция нарушения, toggleSelectAll называется так:

toggleSelectAll($(this), 1); 

пытается subsitute это один:

function toggleSelectAll(control) { 
var allOptionIsSelected = (control.val() || []).indexOf("1") > -1; 

Вы можете увидеть несколько примеров JSFiddle для иллюстрации лучше:

Эта работа: http://jsfiddle.net/victorRGS/o8cjtoqp/1/

Это не: http://jsfiddle.net/victorRGS/o8cjtoqp/2/

Если вы можете пролить некоторый свет на это было бы здорово! Заранее спасибо!

+3

Попробуйте '.indexOf (nadaValue)'? – tcooc

+1

Сначала удалите кавычки вокруг имени переменной. В настоящее время 'indexOf' пытается найти литерал' '1" '. Затем вам нужно либо передать строку, либо найти 'nadaValue.toString()', так как 'indexOf' использует строгое сравнение. – Teemu

+0

Хорошо, я нашел решение, и это то, что говорит @Teemu, мне пришлось преобразовать 'nadaValue.toString()', и он работал как шарм. Спасибо за ваши ответы. Должен ли я оставить этот комментарий здесь или разместить надлежащий ответ? –

ответ

0

indexOf использует строгое сравнение, если вы можете найти аргумент из массива.

Данные у вас есть тип строки. Однако вы передаете число как nadaValue, поэтому indexOf всегда не удается найти соответствие из массива.

Чтобы исправить это, вы должны либо передать строку как nadaValue, либо явно преобразовать ее в строку перед использованием в indexOf. Удобный способ будет создать временную строку:

(... indexOf(nadaValue.toString()) ...)

Таким образом, вы можете сохранить тип номера, если это необходимо, позже в коде.

+0

Это ответ, который мне нужен! –

0

У вас возникли проблемы с вашим кодом. indexOf() Функция использует строгое сравнение, то есть сравнение с '===', которое будет сравнивать данные и тип данных. Поэтому, сравнивая nadaValue, он (indexOf()) проверяет буква 1 вместо строки 1, то есть «1».

+0

Объяснение правильное, но исправление не является. В то время как 'indexOf (« 1 »)' работает, ваш ответ не должен работать? – Teemu

+0

Спасибо @Teemu. Я рассматривал второй скрипт как рабочий пример. Обновил ответ. – Abhijeet

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