@prokopov-vi

Как правильно сохранять данные в буфер с полей?

Есть GridView в котором выводиться с помощью функции для каждой строки input и кнопка, при нажатии на которою контент input должен сохранятся в буфер.
Для этого я использую библиотеку clipboard.js, все делаю по инструкции, и оно правда работает, но есть пару багов (один баг - самой библиотеки, а другой, видимо, мой):
  1. не копируется контент с input свойство disabled которого стоит false.
  2. копируется контент, всегда только первого input.


Вот так я делаю реализацию GridView и виджета для вывода input:

GridView:

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'id',
            'name',
            [
                'attribute' => 'file',
                'format' => 'raw',
                'label' => 'File',
                'value' =>  function($data){
                    return FileManagerInputWidget::widget([
                        'path' =>  Url::to('@fileManager/'.$data['file']),
                    ]);
                }
            ]);
 ?>


FileManagerInputWidget:

<?php

namespace common\widgets;


use yii\base\Widget;

class FileManagerInputWidget extends Widget
{
    public $path;
    
    function init()
    {
       
    }
    
    function run()
    {
       return $this->render('file-manager-input',[
        'path' =>  $this->path,
       ]);
    }

  
}


file-manager-input.php

<?php
use yii\helpers\Html;
use yii\web\AssetBundle;
use yii\web\View;
/**
 * @var $this View
 * */
AssetBundle::register($this);
$this->beginPage();
?>

<!DOCTYPE html>
<html>
<head>
    <?php
        $this->head();
    ?>
    <?php $this->registerJs('(function(){
        new Clipboard(\'#copy\');
    })();')?>

</head>
<body>
<?php $this->beginBody()?>

<div class="row">
    <div class="col-lg-6">
        <div class="input-group">
            <?= Html::input('text', null ,$path,
                [
                    'class'=> 'form-control',
                    'id' => 'link',
                ])
            ?>
                <span class="input-group-btn">
             <?= Html::button('Copy',
                 [
                     'id' => 'copy',
                     'class' => 'btn btn-default',
                     'data-clipboard-target' => '#link',
                 ])?>
      </span>
        </div>
    </div>
</div>

<?php $this->endBody()?>
</body>
</html>
<?php
$this->endPage();
?>


Копирование есть, но копирует только с самого первого инпута.

Как это можно исправить ?
Я думал - это из за того, что я так реализовываю вывод инпутов и кнопок в GridView, но сделал по-другому и этот баг остался!
Что я делаю не правильно?
  • Вопрос задан
  • 294 просмотра
Пригласить эксперта
Ответы на вопрос 1
@polar-bear
Вы вешаете плагин на id, поэтому и копирует с первого встретившегося id на странице. Попробуйте через класс
<?php $this->registerJs('(function(){
        new Clipboard(\'.copy\');
    })();')?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 22:03
3000 руб./за проект
23 нояб. 2024, в 21:53
30000 руб./за проект
23 нояб. 2024, в 21:49
1000 руб./в час