Запустить другую функцию при динамически создаваемом изменении выбора - PullRequest
0 голосов
/ 11 февраля 2012

Использование таблиц данных. Это генерировало следующее selectbox динамически с Javascript

введите описание ссылки здесь http://content.screencast.com/users/TT13/folders/Jing/media/47ac4d39-5e96-415b-a51e-6d784ef18a3b/2012-02-11_0123.png

Firebug показывает этот фрагмент кода для поля выбора выше

enter image description here

Я попытался вызвать $('#check_all').click( function() с помощью следующей простой функции. Но это не работает. В чем ошибка в коде?

 $('select[name=list_length]').change(function(){
    if($('#check_all').prop('checked')) 
        $('#check_all').click();    
});

$('#check_all').click( function() {
    if($(this).prop('checked')){
        totalqt=0;
        $('.checkbox').each(function(){
            $(this).prop('checked', true);    
            doIt(this);             
        });
    }else{            
        $('.checkbox').each(function(){
            $(this).prop('checked', false);    
            doIt(this);             
        });
    }
    changeQt();     


} );

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

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

function checkAllCheckboxes(isChecked) {
    if(isChecked ){
        totalqt=0;
    }
    $('.checkbox').each(function(){
        $(this).prop('checked', isChecked);    
        doIt(this);             
    });
    changeQt();     
}

$('select[name=list_length]').change(function(){
    if($('#check_all').is(':checked')){
        $('#check_all').prop('checked', false);
        checkAllCheckboxes(false);    
    }
});

$('#check_all').click(function(){
    checkAllCheckboxes(this.checked);
});
0 голосов
/ 11 февраля 2012

Я вижу одну вещь, которая может быть проблемой в вашем коде, но так как вы не пишете о том, что именно не работает, я не уверен, что это проблема.

 $('select[name=list_length]').change(function(){
    if($('#check_all').prop('checked')) 
        $('#check_all').click();    
});

Здесь вы видите, установлен ли флажок, а затем вызываете событие click для него.

В обработчике события click вы снова проверяете, установлен ли флажок, и перебираете другие флажки.Однако событие click, которое вы вызываете в обработчике события change, изменит проверенное состояние флажка, и, таким образом, вы получите противоположный результат того, что задумано.

Как вам это решение?

var toggleCheckBoxes = function() {
    if($(this).prop('checked')){
        totalqt=0;
        $('.checkbox').each(function(){
            $(this).prop('checked', true);    
            doIt(this);             
        });
    }else{            
        $('.checkbox').each(function(){
            $(this).prop('checked', false);    
            doIt(this);             
        });
    }
    changeQt();     
}

$('#check_all').click(toggleCheckBoxes);
$('select[name=list_length').change(function(){
  if($('#check_all').is(':checked')){ toggleCheckBoxes(); }
});
...