Применение strpos

Рейтинг: 0Ответов: 1Опубликовано: 21.11.2014

Uncaught TypeError: Cannot read property 'replace' of undefined
Кричит, что не может прочитать свойство:

function check_digit(name,frac) {
    if (isNaN(frac)) frac = 0;
    if (frac <= 0) frac = -1;
    var s = $(name).val();
    alert(s);
    var i = strpos(s.replace(',','.'),'.');
    if (i !== false && i >= 0 && i < s.length-frac-1) {
        $(name).val(s.substring(0,i+frac+1));
    }
}

Тут кричит, что не объявлена переменная add_summ, хотя она, как все, объявляется здесь:

s += '<td class="givc_in2 givc_brd_urdl" align="center"><input id="counter'+i+'_curr" class="inputbox not_border_input givc_txt" size="6" value=""></td>';
                s += '<td class="givc_in2 givc_brd_urd_" align="center"><input id="counter'+i+'_prev" class="inputbox not_border_input givc_txt" size="6" value=""></td>';
                s += '<td class="givc_in2 givc_brd_urd_" align="center"><input id="counter'+i+'_diff" class="inputbox not_border_input givc_txt" size="6" value=""></td>';
                s += '<td class="givc_in2 givc_brd_u_d_" align="center" style="background-color:#ebebeb;"><input id="counter'+i+'_trff" class="inputbox not_border_input givc_txt" size="6" style="background-color:#ebebeb;" value='+counter_tariff[i]+' readonly></td>';
                s += '<td class="givc_in2 givc_brd_urdl" align="center"><input id="counter'+i+'_summ" class="inputbox not_border_input givc_txt" size="8" value="" style="font-weight:bold;"></td>';

Подскажите, пожалуйста, как решить проблему с невозможностью прочесть свойство?

Обновление

strpos:

function strpos( haystack, needle, offset){ 
var i = haystack.indexOf( needle, offset );
return i >= 0 ? i : false;
}

Ответы

▲ 1

Проверьте, что содержится в переменной name на момент вызова функции check_digit. Для этого поставьте в самом начале вызова функции check_digit ключевое слово

debugger;

Затем откройте консоль Firebug (или аналогичную консоль Google Chrome), вкладка "Сценарий". Перезагрузите страницу и создайте ситуацию, при которой происходит вызов функции check_digit. Произойдет остановка сценария в том месте, где объявлен debugger. Теперь наведите мышкой на переменную name и во всплывающей подсказке должно появится значение, хранящееся в ней, - это должен быть правильный селектор jQuery. Убедитесь в том, что элемент, соответствующий селектору, присутствует на момент вызова функции check_digit. Если нет, то измените селектор так, чтобы выражение

$(name).val();

возвращало значение, отличающееся от undefined.

Обновление

Открываем консоль и вводим $('#service0_add_summ').length;, если консоль вернет 0, значит такого элемента на странице нет. length указывает на количество элементов с таким id на странице.