42
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

buttonタグで勝手にリロードされてしまう(vue.js)

Last updated at Posted at 2019-06-12

formをひとつだけ用意して、それぞれどのボタンを押されたかで挙動を変更するためボタンにv-on:clickを設定したところ
画面が勝手にリロードされハマりました。

(laravelのbladeテンプレート内でVueを使用)

<form id="item-form">
	<select v-on:change="addCondition($event, 'operator_name')">
	    <option v-for="member in members">
	        @{{member.name}}
	    </option>
	</select>
    <button id="search_button" v-on:click="search">検索</button>
    <button id="delete_button" v-on:click="deleteItem($event, item)">削除</button>

    <ul id="show-list">
		<li v-if="search_condition !== null" v-for="val in search_condition">
			@{{ val }}
		</li>
	</ul>
</form>


@section('script')
<script>

var vm = new Vue({
	el: '#item-form',
	data: {
		members: {!! json_encode($members) !!},
		search_condition: [],
	},
	methods: {
		 addCondition: function(event, type, cond="="){
			 console.log(event);
            if(event.target.value == ""){
                vm.search_condition.pop();
            }else{
            	vm.search_condition.push(event.target.value);
            }
        },
		search: function(){
			alert('検索する');
			console.log(this.search_condition);
		},
		deleteItem: function(){
			alert('削除する');
			console.log(this.search_condition);
		}
	},

});
</script>

alertを出したあと一旦console.logするだけにしたのですが
なぜか画面がリロードされてしまう。。。(URLの最後に?がつくのでget通信しようとしているようにみえる)

##原因:type属性が設定されていないbuttonタグは、type=submitを付与しているときと同じ動作をします。
しらなかった。。。。

ドキュメント( https://developer.mozilla.org/ja/docs/Web/HTML/Element/button )より以下抜粋
・form属性この属性を指定しない場合は、祖先に <form> 要素が存在すれば、その要素に関連付けられます。
・type属性submit: 自身が属するフォームのデータをサーバーに送信するボタンとなります。これは type 属性が指定されていない場合、もしくは属性値が動的に空にされたり不正な値にされた場合の既定の動作です。

###解決方法1: buttonタグじゃなくてinputタグのtype=buttonにする

<input type="button" v-on:click="search" value="検索">

###解決方法2: buttonタグのままtype=buttonを追加

<button type="button" v-on:click="search">検索</button>

###解決方法3: イベント修飾子.preventを使う

<button v-on:click.prevent="search">検索</button>

####参考:
https://stackoverflow.com/questions/44681646/the-page-will-strangely-refresh-when-i-click-the-button

42
19
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?