CCheckBoxColumn и javaScript

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

CCheckBoxColumn и javaScript

Сообщение tanchik »

Здравствуйте!Вот суть проблемы: в грид вью есть столбец чекбоксов, можно выбрать несколько или одну записей

Код: Выделить всё

array(
                                'header'=>'selected',
                        'class'=>'CCheckBoxColumn',
                                'selectableRows'=>2,
                        'htmlOptions'=>array("width"=>"35"),
                        'checkBoxHtmlOptions'=>array(
                                'checked'=>'checked',
                        )),
под грид вью есть кнопка, по нажатию на которую удаляются выделенные записи:

Код: Выделить всё

<div id="allAction" class="allAdminAction2" title="Удалить выбранные записи" name="btndeleteall"> </div>
вот скрипт к ней:

Код: Выделить всё

Yii::app()->clientScript->registerScript('search', "
$('.search-button').click(function(){
        $('.search-form').toggle();
        return false;
});
$('.search-form form').submit(function(){
        $.fn.yiiGridView.update('sites-grid', {
                data: $(this).serialize()
        });
        return false;
});
$('.allAdminAction2').click(function(){

        var atLeastOneIsChecked = $('input[name=\"tableStyle_c0[]\"]:checked').length > 0;

        if (!atLeastOneIsChecked)
        {
                alert('Please select atleast one record to delete');
        }
        else if (window.confirm('Are you sure you want to delete the the selected records?'))
        {
                document.getElementById('u2s-search-form').action='index.php?r=user2sites/deleteall';
                document.getElementById('u2s-search-form').submit();
        }
});
");
и все бы хорошо, только данная кнопка не работает на последующих страницах, только на первой.Как быть?
Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: CCheckBoxColumn и javaScript

Сообщение Loki »

При изменении страницы ajax`ом нужно перенавешивать скрипты. В функции afterAjaxUpdate, нужно очистить обработчики с кнопки, и навесить их снова.
tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CCheckBoxColumn и javaScript

Сообщение tanchik »

Loki писал(а):При изменении страницы ajax`ом нужно перенавешивать скрипты. В функции afterAjaxUpdate, нужно очистить обработчики с кнопки, и навесить их снова.

А на примере не покажете? :oops:
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: CCheckBoxColumn и javaScript

Сообщение because »

$('.allAdminAction2').click(function(){ переделать на $('body').on('click', '.allAdminAction2', function(){
надеюсь правильно написал
RTFM !
Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: CCheckBoxColumn и javaScript

Сообщение Loki »

tanchik писал(а):
Loki писал(а):При изменении страницы ajax`ом нужно перенавешивать скрипты. В функции afterAjaxUpdate, нужно очистить обработчики с кнопки, и навесить их снова.

А на примере не покажете? :oops:
Так там просто скопировать навешивание в afterAjaxUpdate при создании грида.

Код: Выделить всё

'afterAjaxUpdate' => 'function(id, data) {addingListeners();}'
 
Где addingListeners - функция в которой лежит

Код: Выделить всё

$('.allAdminAction2').click(function(){
...
}
Или собственно прямо в function(id, data) { сюда } засунуть навешивание.
Для профилактики можно в beforeAjaxUpdate выполнить $('.allAdminAction2').unbind('click'); дабы сбросить старый слушатель.

Код: Выделить всё

'afterAjaxUpdate' => 'function(id,options){$(".allAdminAction2").unbind("click");}' 
Если я не ошибаюсь, как то так.
tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CCheckBoxColumn и javaScript

Сообщение tanchik »

because писал(а):$('.allAdminAction2').click(function(){ переделать на $('body').on('click', '.allAdminAction2', function(){
надеюсь правильно написал

Если я правильно поняла, сделала так:

Код: Выделить всё

$this->widget('zii.widgets.grid.CGridView', array(
        'summaryText'=>false,
    'dataProvider'=>$dataProvider,
    'afterAjaxUpdate' => '$("body").on("click", ".allAdminAction2", function()',
    'columns'=>array(
                array(
                                'header'=>'selected',
                        'class'=>'CCheckBoxColumn',
                                'selectableRows'=>2,
                        'htmlOptions'=>array("width"=>"35"),
                        'checkBoxHtmlOptions'=>array(
                                'checked'=>'checked',
                        )),
           .......
Но все равно, кнопка "мертвая", что-то снова не так?
Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: CCheckBoxColumn и javaScript

Сообщение Loki »

because писал(а):$('.allAdminAction2').click(function(){ переделать на $('body').on('click', '.allAdminAction2', function(){
надеюсь правильно написал
Тоже вариант, но по моему для навешивания на несозданные узлы используется .live

Код: Выделить всё

$('.allAdminAction2').live('click', function(){});
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: CCheckBoxColumn и javaScript

Сообщение because »

Loki писал(а):
because писал(а):$('.allAdminAction2').click(function(){ переделать на $('body').on('click', '.allAdminAction2', function(){
надеюсь правильно написал
Тоже вариант, но по моему для навешивания на несозданные узлы используется .live

Код: Выделить всё

$('.allAdminAction2').live('click', function(){});
можно и так. правда live уже deprecated, но работает
tanchik писал(а):
because писал(а):$('.allAdminAction2').click(function(){ переделать на $('body').on('click', '.allAdminAction2', function(){
надеюсь правильно написал
Если я правильно поняла, сделала так:

Код: Выделить всё

           .......
 
Но все равно, кнопка "мертвая", что-то снова не так?
заменить надо было в коде, который вы привели в registerScript в первом сообщении
RTFM !
tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CCheckBoxColumn и javaScript

Сообщение tanchik »

because писал(а):
заменить надо было в коде, который вы привели в registerScript в первом сообщении
Я заменила вот так:

Код: Выделить всё

Yii::app()->clientScript->registerScript('search', "
$('.search-button').click(function(){
        $('.search-form').toggle();
        return false;
});
$('.search-form form').submit(function(){
        $.fn.yiiGridView.update('sites-grid', {
                data: $(this).serialize()
        });
        return false;
});
$('body').on('click', '.allAdminAction2', function(){

        var atLeastOneIsChecked = $('input[name=\"tableStyle_c0[]\"]:checked').length > 0;

        if (!atLeastOneIsChecked)
        {
                alert('".Yii::t('managers','Please select atleast one record to delete.')."');
        }
        else if (window.confirm('".Yii::t('managers','Are you sure you want to delete the selected records?')."'))
        {
                document.getElementById('u2s-search-form').action='index.php?r=user2sites/deleteall';
                document.getElementById('u2s-search-form').submit();
        }
});
");
но все по прежнему - на первой странице работает, а дальше нет.
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: CCheckBoxColumn и javaScript

Сообщение because »

сам невнимательно прочитал первое сообщение, кнопка то под гридом оказывается. тогда не знаю
RTFM !
tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CCheckBoxColumn и javaScript

Сообщение tanchik »

Ой, а хоть кто-нибудь знает?если да - направьте пожалуйста!
Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: CCheckBoxColumn и javaScript

Сообщение Loki »

tanchik, а то что я советовал, пробовали?
tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CCheckBoxColumn и javaScript

Сообщение tanchik »

Loki писал(а):tanchik, а то что я советовал, пробовали?
Да, Loki! Делала вот так:

Код: Выделить всё

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'tableStyle',
        'summaryText'=>false,
    'dataProvider'=>$dataProvider,
    'afterAjaxUpdate' => 'function(id,options){$(".allAdminAction2").unbind("click");}',
 ....
Но работает только в фаерфоксе, и то только после нажатия контрл+ф5, в остальных браузерах не работает. Я в растерянности - что же делать?
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: CCheckBoxColumn и javaScript

Сообщение because »

tanchik писал(а): Но работает только в фаерфоксе, и то только после нажатия контрл+ф5, в остальных браузерах не работает. Я в растерянности - что же делать?
отлаживать скрипт в firebug
RTFM !
Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: CCheckBoxColumn и javaScript

Сообщение Loki »

Пардон, этот код не верный, верна подпись к нему - unbind нужно в before а не after.

В after - навешивание. Как - я описал выше.
tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CCheckBoxColumn и javaScript

Сообщение tanchik »

Loki писал(а):Пардон, этот код не верный, верна подпись к нему - unbind нужно в before а не after.

В after - навешивание. Как - я описал выше.

Т.е. нужно вот так?:

Код: Выделить всё

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'tableStyle',
        'summaryText'=>false,
    'dataProvider'=>$dataProvider,
    'beforeAjaxUpdate' => 'function(id,options){$(".allAdminAction2").unbind("click");}',
    'afterAjaxUpdate' => '$("body").on("click", ".allAdminAction2", function()',
....
 
Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: CCheckBoxColumn и javaScript

Сообщение Loki »

Да, что то вроде этого. Я бы сделал так:

Код: Выделить всё

$(".allAdminAction2").on("click", function(event) {... тут то что выполнять по клику ...}
tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CCheckBoxColumn и javaScript

Сообщение tanchik »

Loki писал(а):Да, что то вроде этого. Я бы сделал так:

Код: Выделить всё

$(".allAdminAction2").on("click", function(event) {... тут то что выполнять по клику ...}
Спасибо вам огромное!Все получилось!!!
Ответить