InlineButton должен изменить значение (дату) в базе данных - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь реализовать встроенную кнопку внутри таблицы, которая немедленно изменяет / записывает дату сегодняшнего дня в базу данных. Нажатие на кнопку «изменить» должно записать фактическую дату в базе данных.

Я уже нашел способ создать встроенную кнопку для изменения логического значения внутри базы данных. Например, чтобы активировать / деактивировать продукт.

Теперь мне нужно то же самое, только с тем фактом, что когда я нажимаю кнопку, она должна записывать сегодняшнюю дату в базе данных.

Создание кнопки

function doCustomRenderColumn($fieldName, $fieldData, $rowData, &$customText, &$handled)
        { 
            if ($fieldName == 'active') {
                $dataAttributes = sprintf('data-id="%s" data-active="%s"', $rowData['id'], $fieldData);
                $customText = '<span class="product-info" style="display: none;" ' . $dataAttributes. '></span>' . $customText;
                $customText .=  '<button class="btn btn-default inline-button" style="margin-left: 25px;">Change</button>';
                $handled = true;
            }
        }

Обработка параметров и выполнение запроса

function DoPrepare() {
            if (GetApplication()->IsGETValueSet('id') && GetApplication()->IsGETValueSet('active')) {
                $id = GetApplication()->GetGETValue('id');
                $active = GetApplication()->GetGETValue('active');
                $sql = "UPDATE product SET active=$active WHERE id=$id";
                $this->GetConnection()->ExecSQL($sql);
                echo json_encode(array("active" => $active));
                exit;
            }

Обработка нажмите кнопку и позвоните AJAX

// OnAfterPageLoad event body
 function prepareInlineButtons() {
    $('button.inline-button').click(function() {
        var self = $(this);
        var checkboxControl = self.siblings('.pg-row-checkbox');
        var productId = self.siblings('.product-info').data('id');
        var activity = self.siblings('.product-info').data('active');
        $.getJSON(location.href, {id: productId, active: activity == 1 ? 0 : 1}, function (data) {
            self.siblings('.product-info').data('active', data.active);
            if (data.active == 1) {
                checkboxControl.addClass('checked')
            }
            else {
                checkboxControl.removeClass('checked')
            }
        })
    })
}

prepareInlineButtons();

1 Ответ

0 голосов
/ 16 января 2020

Вы используете click(function(), но это не сработает. Это просто работает для объектов, уже находящихся на экране во время загрузки.

Попробуйте использовать функцию .on () jquery, например $('button.inline-button').on('click', function()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...