Отправка всплывающей формы на странице индекса в CakePHP 3.5 с использованием jquery - PullRequest
0 голосов
/ 28 июня 2018

Мне нужно создать всплывающую кнопку в каждой строке строки индекса, а во всплывающем окне я должен отправить форму. В приведенном ниже коде всплывающее окно открывается для каждой строки, а также отправляется форма, но для каждой строки обновляется один и тот же идентификатор. Я взял скрытое поле ввода идентификатора. Как я могу изменить идентификатор для каждой строки в CakePHP 3.5, используя jquery?

          <table id="example2" class="table table-bordered table-hover">
            <thead>
              <tr>
                <th><?= __('Actions') ?></th>
              </tr>
            </thead>
            <tbody>
            <?php foreach ($purchaseRequisition as $purchaseRequisition): ?>
              <tr class="sentrecord">                               
                <td>
                 <?php 
             echo $this->Html->link(__('', true), array("action"=>"rejectmr"), array("class"=>"overlay fa fa-thumbs-down fa-fw", "title"=>"Reject"));

                    ?>
<div class="dialogModal">
 <!-- the external content is loaded inside this tag -->
            <?php 
       echo $this->Form->create($purchaseRequisition, ['role'=>'form','url' => ['action' => 'rejectmr']]);

           echo $this->Form->input('id',array("class"=>'inputId','label'=>"Rejection Remark",'style'=>'width: 100%;'));

           echo $this->Form->input('manager_rej_remark',array('label'=>"Rejection Remark",'style'=>'width: 100%;'));

          echo $this->Form->button(__('Save'));
          echo $this->Form->end();
           ?>
          <div class="contentWrap"></div>
        </div>
                  </td>
              </tr>
            <?php endforeach; ?>
            </tbody>
          </table>
          <script>
          $(document).ready(function(){
            $(".sentrecord").each(function(){
           var sentRec = $(this);
     // $(this).find(".checkboxSel").click(function(){

            //prepare the dialog

            //respond to click event on anything with 'overlay' class
            $(this).find(".overlay").click(function(event){
                event.preventDefault();

                $(sentRec).find(".dialogModal").dialog({
                    autoOpen: false,
                    show: {
                        effect: "blind",
                        duration: 500
                        },
                    hide: {
                        effect: "blind",
                        duration: 500
                        },
                    modal: true
                    });             

                var qty = $(sentRec).find("#test").val();
                $(sentRec).find(".inputId").val(qty);
                alert(qty);
                $('.contentWrap').load($(this).attr("href"));  //load content from href of link
              //  $('.dialogModal').dialog('option', 'title', $(this).attr("title"));  //make dialog title that of link
                $('.dialogModal').dialog('open');  //open the dialog
                });


    //  });    

}); 

});

1 Ответ

0 голосов
/ 28 июня 2018

идентификаторы должны быть уникальными, вы используете один и тот же dialogModal идентификатор для всех элементов диалога, поэтому при нацеливании на него с помощью jQuery вы всегда будете нацеливаться на первое вхождение этого идентификатора.

Вместо этого используйте класс и укажите его в качестве потомка элемента sentrecord, например

<div class='modal'><!-- ... --></div>
sentRec.find('.modal').dialog(/* ... */);

И цель contentWrap аналогично, это класс, а не ID.

...