携帯電話番号とキャッシュカードの同期表示機能を簡単実現 - マイコラムSifu

不言
リリース: 2023-03-22 18:30:02
オリジナル
1811 人が閲覧しました

この記事は、携帯電話番号と銀行カードの同期表示機能の簡単な実現について皆さんと共有するもので、興味のある友達は見てください

携帯電話番号と銀行カードの同期表示機能の簡単な実現

これはとある同盟のインタビューの質問です
明確なアイデアを持ち、それを書きながら最適化することがすべてではないでしょうか?
その時、私はプレビューボックスの値を計算するために計算されたプロパティを使用するというアイデアだと言いました。入力ボックスの内容に基づいて
フォーカスとブラーのイベントを処理するだけです
手書きで書く必要がありますが、面接官は私が言葉を失うことはないと考えています

は以下の通りです

  1. 入力ボックスの入力内容の長さが0より大きく、プレビュー情報が表示されます

  2. カーソルが離れて閉じますプレビュー情報

  3. 4桁ごとに特殊文字を挿入します

プレビュー情報に入力内容は変更されません


v-model其实是个语法糖
分开写为v-bind:valuev-on:input

<template lang="html">
  <p class="zInput">
      <p class="big-show" v-show="showBig">{{txt2}}</p>
      <input type="text"
             @blur="handerBlur"
             @focus="handerFocus"
             v-model="txt">
  </p>
</template>

<script>
export default {
    name: &#39;z-input&#39;,
    data () {
        return {
            txt: &#39;&#39;,
            showBig: false,
        }
    },
    computed: {
        txt2: function () {
            if (this.txt.length > 0) {
                this.showBig = true
            }
            return this.getStr(this.txt, 4)
        }
    },
    methods: {
        handerBlur () {
            this.showBig = false
        },
        handerFocus (evt) {
            if (evt.target.value.length > 0) {
                this.showBig = true
            }
        },
        getStr (str, len) {
            let lenth = str.length
            let len1 = len - 1
            let newStr = &#39;&#39;
            for (var i = 0; i < lenth; i++) {
                if (i % len === len1 && i > 0) {
                    newStr += str.charAt(i) + &#39;_&#39;
                } else {
                    newStr += str.charAt(i)
                }
            }
            if (newStr.length % (len + 1) === 0) {
                // 解决最后一位为补充项问题
                newStr = newStr.substr(0, newStr.length - 1)
            }
            return newStr
        },
    }
}
</script>

<style lang="less">
.zInput{
    position: relative;
    .big-show {
        position: absolute;
        top: -40px;
        font-size: 36px;
        line-height: 40px;
        background-color: red;
    }
}
.zInput{
    top:50px;
}
</style>
ログイン後にコピー
ログイン後にコピー

限制只能输入数字
首先想到的是在keyup时把非数字过滤掉
但是事实是先执行keydown->handerInput->keyup

那就在keydown时处理呗,但是keydown修改evt.target.value
handerInput取到的evt.target.value依旧是未处理的所以说在keydown处理不起作用
必须要在handerInput計算された属性を使用して判断するだけです

<template lang="html">
  <p class="zInput">
      <p class="big-show" v-show="showBig">{{txt2}}</p>
      <input type="text"
             @blur="handerBlur"
             @focus="handerFocus"
             v-bind:value="txt"
             v-on:input="handerInput">
  </p>
</template>

<script>
export default {
    name: &#39;z-input&#39;,
    data () {
        return {
            txt: &#39;&#39;,
            txt2: &#39;&#39;,
            showBig: false,
        }
    },
    methods: {
        handerInput (evt) {
            let val = evt.target.value.substr(0, 13)
            // 限制长度13位
            this.txt = val
            evt.target.value = val
            if (this.txt.length > 0) {
                this.showBig = true
            }
            this.txt2 = this.getStr(this.txt, 4)
        },
        handerBlur () {
            this.showBig = false
        },
        handerFocus (evt) {
            if (evt.target.value.length > 0) {
                this.showBig = true
            }
        },
        getStr (str, len) {
            let lenth = str.length
            let len1 = len - 1
            let newStr = &#39;&#39;
            for (var i = 0; i < lenth; i++) {
                if (i % len === len1 && i > 0) {
                    newStr += str.charAt(i) + &#39;_&#39;
                } else {
                    newStr += str.charAt(i)
                }
            }
            if (newStr.length % (len + 1) === 0) {
                // 解决最后一位为补充项问题
                newStr = newStr.substr(0, newStr.length - 1)
            }
            return newStr
        },
    }
}
</script>
ログイン後にコピー

長さ制限が追加される場合、上記の方法は不適切です、実装計画を変更してください

v-model< /code> は実際には糖衣構文です<p class="article fmt article__content"> <code>v-bind:valuev-on:input として別々に記述されます
<input type="text"
       @blur="handerBlur"
       @focus="handerFocus"
       @keyup="handerKeyup"
       @keydown="handerKeydown"
       v-bind:value="txt"
       v-on:input="handerInput">
<script>
       handerKeydown (evt) {
           console.log(&#39;handerKeydown&#39;)
           evt.target.value = evt.target.value.replace(/[^\d]/g, &#39;&#39;)
           // 这里修改不起作用
       },
       handerKeyup (evt) {
           console.log(&#39;keyup&#39;)
           evt.target.value = evt.target.value.replace(/[^\d]/g, &#39;&#39;)
           // 这里执行顺序靠后 修改无用
       },
       handerInput (evt) {
           let val = evt.target.value.substr(0, 13).replace(/[^\d]/g, &#39;&#39;)
           console.log(&#39;handerInput__val&#39;, val)
           //这里拿到的val是纯数字
           evt.target.value = val
           this.txt = val
           if (this.txt.length > 0) {
               this.showBig = true
           }
           this.txt2 = this.getStr(this.txt, 4)
       },
</script>
ログイン後にコピー

数値の入力は数値のみに制限してください

最初に思い浮かぶのは、keyup 中に数字以外をフィルタリングすることです

しかし実際には、keydown->handerInput が最初に実行されるということです。 >->keyup


その後、keydown で処理されますが、keydown 後に 内の <code>evt.target.value が変更されます

handerInput によって取得された evt.target.value はまだ処理されていないため、keydown での処理は機能しません

handerInput で行う必要がありますcode code> 処理時

<template lang="html">
  <p class="zInput">
      <p class="big-show" v-show="showBig">{{txt2}}</p>
      <input type="text"
             @blur="handerBlur"
             @focus="handerFocus"
             v-model="txt">
  </p>
</template>

<script>
export default {
    name: &#39;z-input&#39;,
    data () {
        return {
            txt: &#39;&#39;,
            showBig: false,
        }
    },
    computed: {
        txt2: function () {
            if (this.txt.length > 0) {
                this.showBig = true
            }
            return this.getStr(this.txt, 4)
        }
    },
    methods: {
        handerBlur () {
            this.showBig = false
        },
        handerFocus (evt) {
            if (evt.target.value.length > 0) {
                this.showBig = true
            }
        },
        getStr (str, len) {
            let lenth = str.length
            let len1 = len - 1
            let newStr = &#39;&#39;
            for (var i = 0; i < lenth; i++) {
                if (i % len === len1 && i > 0) {
                    newStr += str.charAt(i) + &#39;_&#39;
                } else {
                    newStr += str.charAt(i)
                }
            }
            if (newStr.length % (len + 1) === 0) {
                // 解决最后一位为补充项问题
                newStr = newStr.substr(0, newStr.length - 1)
            }
            return newStr
        },
    }
}
</script>

<style lang="less">
.zInput{
    position: relative;
    .big-show {
        position: absolute;
        top: -40px;
        font-size: 36px;
        line-height: 40px;
        background-color: red;
    }
}
.zInput{
    top:50px;
}
</style>
ログイン後にコピー
ログイン後にコピー
                                     



携帯電話番号とキャッシュカードの同期表示機能を簡単に実現

  1. これは某アライアンスの面接質問です
  2. 明確なアイデアを持って後から最適化するだけではないでしょうか?

    そのときは、アイデアを話した後、計算されたプロパティを使用して、入力ボックスの内容に基づいてプレビュー ボックスの値を計算します。

    フォーカスとブラーのイベントを処理するだけです。
  3. それを手動で記述する必要があります。 . 手書きでは書けないと面接官は絶句すると思いました
  4. 下記の通り

入力ボックスの入力内容のデータ長が0より大きく、プレビュー情報が表示されます


v-model其实是个语法糖
分开写为v-bind:valuev-on:input

<template lang="html">
  <p class="zInput">
      <p class="big-show" v-show="showBig">{{txt2}}</p>
      <input type="text"
             @blur="handerBlur"
             @focus="handerFocus"
             v-bind:value="txt"
             v-on:input="handerInput">
  </p>
</template>

<script>
export default {
    name: &#39;z-input&#39;,
    data () {
        return {
            txt: &#39;&#39;,
            txt2: &#39;&#39;,
            showBig: false,
        }
    },
    methods: {
        handerInput (evt) {
            let val = evt.target.value.substr(0, 13)
            // 限制长度13位
            this.txt = val
            evt.target.value = val
            if (this.txt.length > 0) {
                this.showBig = true
            }
            this.txt2 = this.getStr(this.txt, 4)
        },
        handerBlur () {
            this.showBig = false
        },
        handerFocus (evt) {
            if (evt.target.value.length > 0) {
                this.showBig = true
            }
        },
        getStr (str, len) {
            let lenth = str.length
            let len1 = len - 1
            let newStr = &#39;&#39;
            for (var i = 0; i < lenth; i++) {
                if (i % len === len1 && i > 0) {
                    newStr += str.charAt(i) + &#39;_&#39;
                } else {
                    newStr += str.charAt(i)
                }
            }
            if (newStr.length % (len + 1) === 0) {
                // 解决最后一位为补充项问题
                newStr = newStr.substr(0, newStr.length - 1)
            }
            return newStr
        },
    }
}
</script>
ログイン後にコピー

限制只能输入数字
首先想到的是在keyup时把非数字过滤掉
但是事实是先执行keydown->handerInput->keyup

那就在keydown时处理呗,但是keydown修改evt.target.value
handerInput取到的evt.target.value依旧是未处理的所以说在keydown处理不起作用
必须要在handerInputカーソルが離れてプレビュー情報を閉じます

プレビュー情報は4桁ごとに特殊文字が挿入され、入力内容は変わりません

計算された属性を使用して判断するだけです

長さ制限があるため、上記の方法は適切ではありません。実装計画を変更してくださいv-model は実際には糖衣構文です

v-bind:value と v-on:inputrrreee入力を数字に制限します

最初に思い浮かぶのは、keyup のときに数字以外をフィルタリングすることです 🎜しかし実際には、 >keydown->handerInput->keyup🎜🎜その後、keydown を実行します。ただし、keydown の後は evt が変更されます。 target.value では、handerInput から取得した evt.target.value がまだ処理されていないため、keydown での処理は機能しません 🎜 handerInput で処理する必要があります🎜rrreee🎜 関連する推奨事項: 🎜🎜🎜正規表現を使用して、ユーザーが入力した銀行カード番号を確認します (コード付き) 🎜🎜🎜🎜js、jq 銀行カードを確認する方法アカウントコードの共有🎜🎜🎜🎜携帯電話番号、メールアドレス、IDカード、キャッシュカードの定期認証例🎜🎜

以上が携帯電話番号とキャッシュカードの同期表示機能を簡単実現 - マイコラムSifuの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!