LaravelとVue.jsを用いて以下のようにBootstrap tableにcheckboxを作り、jQueryでチェックされた時のイベント検知を行おうとしておりますが上手くいきません。チェックボックスが変化したらConsoleにchanged
と表示したいです。
index.blade.php
php
1@extends('layouts.app') 2 3@section('content') 4<div id="x_lists_index"> 5 <x-lists-index inline-template> 6 <form action="{{ route('xLists.multiDelete') }}" method="post"> 7 @csrf 8 <bootstrap-table-component ref="table" :props-data="{{$xLists}}" 9 :props-columns="columns"></bootstrap-table-component> 10 <button type="submit">削除</button> 11 </form> 12 </x-lists-index> 13</div> 14@endsection 15 16@section('js') 17<script> 18 new Vue({ 19 el: "#x_lists_index", 20 }); 21 $(function () { 22 $("input[name='ids[]']").change(function() { 23 console.log('changed'); 24 }); 25 }); 26</script> 27@endsection
index.js
js
1Vue.component('x-lists-index', { 2 data() { 3 return { 4 columns: [{ 5 field: "id", 6 title: " ", 7 sortable: true, 8 formatter: function (value, row, index) { 9 return '<input type="checkbox" id="check_' + index + '" \ 10 name="ids[]" value="' + value + '" style="transform: scale(2);">'; 11 } 12 }, 13 { 14 field: "model_number", 15 title: "型番", 16 sortable: true, 17 filterControl: "input", 18 },] 19 }; 20 }, 21});
BootstrapTableComponent.vue
js
1<template> 2 <div> 3 <bootstrap-table 4 ref="table" 5 :data="data" 6 :options="options" 7 :columns="columns" 8 /> 9 </div> 10</template> 11 12<script> 13import BootstrapTable from "bootstrap-table/dist/bootstrap-table-vue.min.js"; 14export default { 15 props: { 16 propsData: Array, 17 propsColumns: Array, 18 }, 19 components: { 20 "bootstrap-table": BootstrapTable 21 }, 22 data() { 23 return { 24 data: [], 25 options: { 26 search: true, 27 detailView: true, 28 detailFormatter: null, 29 pagination: true, 30 showColumns: true, 31 filterControl: true, 32 toolbar: "#toolbar", 33 clickToSelect: true, 34 idField: "id", 35 selectItemName: "id", 36 resizable: true, 37 locale: "ja-JP" 38 }, 39 columns: [] 40 }; 41 }, 42 created() { 43 this.columns = this.propsColumns; 44 this.data = this.propsData; 45 }, 46}; 47</script>
試したこと
jQueryのchangeメソッドをclickやon('change', ...)にしてもダメでした。
また、bladeファイルではなくindex.js内のcreatedフックに同様のjQuery関数を移動してもダメでした。
できていること
チェックされた行を複数削除する機能は問題なく動作しています。
Bootstrap tableに関係ないjQuery関数は問題なく動作しています(buttonのdisabledの切り替えなど)。
Bootstrap tableに関係ないcheckboxに対しても問題なく動作しています
(<input type="checkbox" id="check_out_of_table">に対する$("input[id='check_out_of_table']").change(function...))。
バージョン
Laravel7.3 jQuery3.2 Vue2.5.17
望まない解決策
index.js内のformatter関数を以下のように変更すると成功しました。しかしできるだけこのようなコードは避けたいです。
js
1formatter: function (value, row, index) { 2 return '<input type="checkbox" id="check_' + index + '" name="ids[]" value="' + value + '" style="transform: scale(2);"> \ 3 <script>$("#check_' + index + '").change(function() {console.log("chenged");});</script>';
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/02 13:10