Das Problem und die Lösung des Konflikts zwischen keyup.enter- und Blur-Ereignissen in Vue


Konflikt zwischen keyup.enter- und Blur-Ereignissen

Der Code lautet wie folgt (Beispiel):

<el-input class="input-new-tag" 
      v-if="row.inputVisible" 
      v-model="row.inputValue" 
      :ref="$index" size="small" 
      @keyup.enter.native="handleInputConfirm(row,$index)" 
      @blur="handleInputConfirm(row,$index)"
>

Als ich dieses Geschäft schrieb, stieß ich auf ein Problem entermit blurKonflikten und drückte die Eingabetaste, was zu inputeinem Fokusverlust führte, der dazu führte, dass diese Funktion 2nacheinander ausgelöst wurde.handleInputConfirm(row,$index)

Lösung

Der Code lautet wie folgt (Beispiel):

<el-input class="input-new-tag" 
   v-if="row.inputVisible" 
   v-model="row.inputValue" 
   :ref="$index" size="small" 
   @keyup.enter.native="$event.target.blur" 
   @blur="handleInputConfirm(row,$index)"
>
 
//将回车触发的方法改为去触发元素的blur事件 这样就不会重复触发了。

So vermeiden Sie das gleichzeitige Auslösen von „keyup.enter“ und „blur“.

Problembeschreibung

In einem bestimmten Szenario müssen Sie auf das Etikett klicken, spanum es zu inputeinem Etikett zu machen, und dann inputunter dem Etikett etwas bearbeiten. Drücken Sie nach der Bearbeitung die Eingabetaste enteroder klicken Sie inputaußerhalb des Etiketts, um wieder zum spanEtikett zu wechseln

  • Initialisierung

Fügen Sie hier eine Bildbeschreibung ein

  • Nach Doppelklick:

Fügen Sie hier eine Bildbeschreibung ein

  • Eingeben:

Fügen Sie hier eine Bildbeschreibung ein
实际上触发了两次

den Code implementieren

Der Code lautet wie folgt (Beispiel):

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Document</title>
		<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<template v-if="isShow">
				<span @dblclick="showInput">{
    
    {
    
    msg}}</span>
			</template>
			<template v-else>
				<input
					@keyup.enter="hideInput"
					@blur="hideInput"
					v-focus
					type="text"
					v-model="msg"
				/>
			</template>
		</div>
		<script>
			let app = new Vue({
    
    
				el: '#app',
				data: {
    
    
					msg: 'hello',
					isShow: true,
				},
				directives: {
    
    
					focus: {
    
    
						inserted: (el) => {
    
    
							el.focus()
						},
					},
				},
				methods: {
    
    
					showInput() {
    
    
						this.isShow = false
					},
					hideInput() {
    
    
            			console.log('触发')
						this.isShow = true
					},
				},
			})
		</script>
	</body>
</html>

Lösung

@keyup.enter="$event.target.blur()"
  • Nach der Modifikation:

Fügen Sie hier eine Bildbeschreibung ein

Gesamtrealisierung

Der Code lautet wie folgt (Beispiel):

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Document</title>
		<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<template v-if="isShow">
				<span @dblclick="showInput">{
    
    {
    
    msg}}</span>
			</template>
			<template v-else>
				<input
					@keyup.enter="$event.target.blur()"
					@blur="hideInput"
					v-focus
					type="text"
					v-model="msg"
				/>
			</template>
		</div>
		<script>
			let app = new Vue({
    
    
				el: '#app',
				data: {
    
    
					msg: 'hello',
					isShow: true,
				},
				directives: {
    
    
					focus: {
    
    
						inserted: (el) => {
    
    
							el.focus()
						},
					},
				},
				methods: {
    
    
					showInput() {
    
    
						this.isShow = false
					},
					hideInput() {
    
    
            			console.log('触发')
						this.isShow = true
					},
				},
			})
		</script>
	</body>
</html>

Acho que você gosta

Origin blog.csdn.net/weixin_48353638/article/details/129615339
Recomendado
Clasificación