Целочисленный JavaScript, ведущий к NaN - PullRequest
2 голосов
/ 31 августа 2011

У меня есть JavaScript, который в основном выглядит следующим образом:

function a() {
    b(1);
}

function b(myNumber) {
    c(myNumber);
}

function c(myNumber) {
    var calculation = 5 * (myNumber - 1);
    alert(calculation);
}

Когда я вызываю функцию a(), окно предупреждения заканчивается сообщением «NaN».Почему это происходит?Я пытался использовать функцию parseInt() в нескольких местах, но, похоже, ничего не работает.

РЕДАКТИРОВАТЬ

Полный код (что на самом деле делается, а не урезанный пример):

function updateTablePagination(tableId, rowsPerPageSelectId) {
    updateTablePagination(tableId, rowsPerPageSelectId, 1);
}

function updateTablePagination(tableId, rowsPerPageSelectId, pageNumber) {
    var table = document.getElementById(tableId);
    var rowsPerPageSelect = document.getElementById(rowsPerPageSelectId);
    var rowsPerPage = rowsPerPageSelect.options[rowsPerPageSelect.selectedIndex].text;

    updateTable(table, rowsPerPage, pageNumber);
    //updateTablePageLinks();
}

function updateTable(table, rowsPerPage, pageNumber) {
    var tableRows = table.getElementsByTagName("tr");
    var totalNumberOfRows = tableRows.length;

    var startRow = rowsPerPage * (pageNumber - 1);      
     var endRow = Math.min(startRow + rowsPerPage, totalNumberOfRows - 1);

    alert("Start: " + startRow + "\nEnd: " + endRow);
}

В поле выбора есть onchange, вызывающий updateTablePagination('myTableId', 'rowsPerPage').Оба идентификатора верны.

"Начало" и "Конец" оба NaN.

Редактировать 2

В качестве альтернативы, если я просто сделаю alert(pageNumber), это не определено.

Упрощенный

Даже это говорит о том, что pageNumber не определено:

function updateTablePagination(tableId, rowsPerPageSelectId) {
    updateTablePagination(tableId, rowsPerPageSelectId, 1);
}

function updateTablePagination(tableId, rowsPerPageSelectId, pageNumber) {
    alert(pageNumber);
}

Ответы [ 2 ]

6 голосов
/ 31 августа 2011

У вас есть две функции с именем updateTablePagination. Javascript не поддерживает перегрузку функций. Избавьтесь от первого объявления, потому что оно перезаписывается вторым. Вы можете использовать || для определения значения по умолчанию для параметра.

function updateTablePagination(tableId, rowsPerPageSelectId, pageNumber) {
    pageNumber = pageNumber || 1; //Set a default value for pageNumber
    var table = document.getElementById(tableId);
    var rowsPerPageSelect = document.getElementById(rowsPerPageSelectId);
    var rowsPerPage = rowsPerPageSelect.options[rowsPerPageSelect.selectedIndex].text;

    updateTable(table, rowsPerPage, pageNumber);
    //updateTablePageLinks();
}


updateTablePagination(tableId, rowsPerPageSelectId) //Will call the function with pageNumber == 1
2 голосов
/ 31 августа 2011

Проблема в том, что вы перезаписываете функции. С этим:

function a() {
    a(1)
}

function a(x) {
    alert(x);
}

вызов a всегда будет вызывать вторую (перезаписанную) функцию, и поэтому x всегда неопределен. Вы хотите что-то вроде перегрузки. В этом случае лучше всего использовать оператор || для значения по умолчанию:

function a(x) {
    var x = x || 1; // x if x is given, otherwise 1
    alert(x);
}
...