2013-09-12 4 views
1

У меня есть список флажков при выборе флажков, я должен добавить значения в массивы, и при снятии отметки я должен удалить это из массива.Код JQuery для удаления элемента из массива

нижеследующий код am используя. но не удалять, а убрав

<tr><td class="tdstyleSelect"><input type="checkbox" name="joblist" onclick="toNfroVmps(this.id);" id="' + i + '" checked> 

var toNfroVmps = function(id) { 
    if($('#' + id).is(':checked')) 
     elementIds.push(id); 
    else  
     delete elementIds[elementIds.indexOf(id)] 
} 

ответ

9

Использование Array.splice (который, кстати, родной метод JS):

var index = elementIds.indexOf(id); 
if (index !== -1) { 
    elementIds.splice(index, 1); 
} 

Вы можете рассмотреть возможность использования хэшей (вместо или обычный массив) для хранения ваших данных: с каждой клавишей, соответствующей идентификатору, и значением true или false.

var elementIds = { 
    el1: true, 
    el2: true, 
    el3: false 
    // ... 
}; 

Таким образом, добавление/удаление элемента будет еще более прямолинейно:

elementIds[id] = $('#' + id).is(':checked'); // either true or false 

... и вы все еще будете иметь возможность обрабатывать этот хэш как массив, используя различные JQuery список понимание функции. Например, вот как вы собираете идентификаторы всех проверяемых элементов:

var checkedIds = $.grep(elementIds, function(el) { return el; }); 
1

Вы можете использовать метод splice для удаления элементов массива.

var toNfroVmps = function(id) 
{ 
    if($('#' + id).is(':checked')) 
     elementIds.push(id); 
    else 
    { 
     // Select the index 
     var i = elementIds.indexOf(id); 

     // Check if the index exists, to prevent any errors that might happen 
     // If exists, delete 
     if(i !== -1) 
      elementIds.splice(i, 1); 

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