2014-01-27 2 views
-1

в этом fiddle есть To button.When нажал на эту кнопку, появится диалоговое окно appears.By по умолчанию из выпадающего меню users является selected.If я установить флажок из этой таблицы пользователей и после этого Если изменить раскрывающееся меню на группы и выбрать флажок из таблицы групп, то в consolse появится Uncaught TypeError: Cannot call method 'split' of undefined. Однако с самого начала (без выбора какого-либо флажка таблицы пользователей) Если я перехожу к таблице групп а затем выберите некоторые флажки, то указанная выше ошибка не появится. Может ли кто-нибудь из тел рассказать мне, как решить эту проблему.Uncaught TypeError: Невозможно вызвать метод «разбить» неопределенной

Ниже приведен код JQuery

$('#ViewFull').click(function() { 
    $('#mytable1 tr').removeClass('hide'); 
}); 
$('.select').on('change', function() { 
    var tablink = '#' + $(this).val(); 
    $('#groups').hide(); 
    $('#users').hide(); 
    $(tablink).show(); 
}); 

function copy_users_table() { 
    var users = $('#mytable').html(); 
    $('#mytable12').html(users); 
} 

function copy_groups_table() { 
    var groups = $('#TogroupsTable').html(); 
    $('#groupsTable1').html(groups); 
} 

function collect_users_and_groups(is_groups) { 
    var tos = []; 
    $('#mytable12 input:checked, #groupsTable1 input:checked').each(function (i, elt) { 
     //alert("to groups"); 
     if (is_groups) { 
      //alert("to groups"); 
      var dataids = $(this).parent().attr("data-selected").split(","); 
      alert("dataids " + dataids); 
     } 
     var name = $.trim($(this).parent().next().text()); 
     tos.push(name); 
    }); 

    return tos.join(', '); 
} 

$('body').on('click', '#to-btn', function() { 
    // copy current tables 
    copy_users_table(); 
    copy_groups_table(); 

    // initialize checkboxes 
    var number = $('#number').val(); 
    $('#ToAdd').text(number); 
    var entries = number.split(/\s*,\s*/); 
    init_users_table(entries); 
    init_groups_table(entries); 

    $("#mytable12 input:checkbox").on('change', function() { 
     var tos = collect_users_and_groups(false); 
     $("#ToAdd").html(tos); 
    }); 

    $("#groupsTable1 input:checkbox").on('change', function() { 
     var tos = collect_users_and_groups(true); 
     $("#ToAdd").html(tos); 
    }); 

    // show tab 
    $('.select').val('users'); 
    $('#users').show(); 
    $('#groups').hide(); 
}); 

$('#ToOk').click(function() { 
    $("#number").val($("#ToAdd").text()); 
}); 

function init_users_table(entries) { 
    // go through all rows 
    $('#users tr').each(function() { 
     var username = $('td:nth-child(2)', this).text(); 
     var selected = $.inArray(username, entries) >= 0; 
     $('input:checkbox', this).prop('checked', selected); 
    }); 
} 

function init_groups_table(entries) { 
    $('#groups tr').each(function() { //added 13 
     var groupname = $.trim($('td:nth-child(2)', this).text()); 
     var selected = $.inArray(groupname, entries) >= 0; 
     $('input:checkbox', this).prop('checked', selected); 
    }); 
} 
+1

Возможно '$ (это) .parent() атр ("данные выбраны")' неопределен – Satpal

+1

@Satpal Я предполагаю, что это 'undefined'. –

+0

@Satpal Но как это не определено. После выбора флажка пользователей возникает только эта ошибка – SpringLearner

ответ

3

Итак, когда вы делаете вызов функции «collect_users_and_groups», код выполняется для обоих проверено флажков, которые принадлежат # mytable12 и проверили флажки, принадлежащие # groupsTable1 (из-за селектора, на который вы применяете каждый). Даже если вы вызываете функцию с is_groups = ложным, код по-прежнему будет проходить через этот фрагмент кода для флажков ранее выбранного в # mytable12:

if (is_groups) 
{ 
    //alert("to groups"); 
    var dataids = $(this).parent().attr("data-selected").split(","); 
    alert("dataids " + dataids); 
} 

Итак, если вы ранее проверенного флажок в # mytable12, код будет возвращать undefined для $ (this) .parent(). attr ("data-selected"), потому что для этих типов ячеек таблицы нет такого атрибута.

Изменить код следующим образом:.

$('#mytable12 input:checked').each(function (i, elt) 
{ 
    var name2 = $.trim($(this).parent().next().text()); 
    tos.push(name2); 
}); 
$('#groupsTable1 input:checked').each(function (i, elt) { 
    //alert("to groups"); 
    if (is_groups) { 
     //alert("to groups"); 
     var dataids = $(this).parent().attr("data-selected").split(","); 
     alert("dataids " + dataids); 
    } 
    var name = $.trim($(this).parent().next().text()); 
    tos.push(name); 
}); 
+0

Спасибо за ответ. Можете ли вы дать мне рабочий скрипт? – SpringLearner

+0

Рабочая демонстрация: http://jsfiddle.net/er144/VYdFR/ – ER144

+0

Вы гениальный man.Can вы, пожалуйста, скажите мне, какие строки вы изменили, чтобы мне было легко изменить в моем приложении, + 1 для справки. – SpringLearner

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