Получение текста из ячейки с использованием каждой функции на отмеченных флажках - PullRequest
0 голосов
/ 30 марта 2010

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

var returnDb = new Array();
var inc = 0;
var returnState = '';
var returnNum = '';
var returnEmail = '';
$("input:checked").each(function() {
    var value = 1*$(this).attr("title");
    var value_vendors = 1*$(this).attr("title");

    // These are causing my script to stop
    returnState = ''. $(this).closest('tr').find('td:eq(1)').text();
    returnNum = ''. $(this).closest('tr').find('td:eq(2)').text();
    returnEmail = ''. $(this).closest('tr').find('td:eq(3)').text();

    returnDb[inc] = [['' . returnState, '' . returnNum, '' . returnEmail]];

    total += parseInt(value);
    vendors += parseInt(value_vendors);

    inc++;
});

Когда я закомментирую три строки, которые приводят к остановке моего скрипта, все работает нормально. Есть идеи, что я делаю неправильно или есть лучший подход к этому?

1 Ответ

2 голосов
/ 30 марта 2010

В javascript вы объединяете строки, используя +, но вам здесь это даже не нужно. Я бы также использовал parseInt для извлечения значений. Всего и продавцы также должны быть инициализированы. Наконец, каждый из них даст вам индекс в качестве аргумента, поэтому ваш счетчик не нужен.

Редактировать : Примечание. Я изменил присвоение массиву returnDb. Ваш оригинал присваивает массив, содержащий массив значений, каждому элементу массива в returnDb. Новый код назначает объект с тремя свойствами (state, num, email) каждому элементу в returnDb. Возможно, ваш оригинал был верным - я не знаю, как вы его используете - но я думаю, что объектный подход в большинстве случаев более применим.

var returnDb = new Array();         
var returnState = '';     
var returnNum = '';     
var returnEmail = ''; 
var total = 0;
var vendors = 0;    
$("input:checked").each(function(i) {     
    var value = parseInt( $(this).attr("title") );     
    var value_vendors = parseInt( $(this).attr("title") );     

    // These are causing my script to stop     
    returnState = $(this).closest('tr').find('td:eq(1)').text();     
    returnNum = $(this).closest('tr').find('td:eq(2)').text();     
    returnEmail = $(this).closest('tr').find('td:eq(3)').text();     

    //returnDb[i] = [[returnState, returnNum, returnEmail]];   
    returnDb[i] = { state: returnState, num: returnNum, email: returnEmail };  

    total += value;     
    vendors += value_vendors;        
}); 
...