You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue2中HTML表单提交二进制转十进制值时数据消失如何解决

问题根因

结果消失是表单原生默认提交行为导致的:

  • 转换按钮设置了type="submit",放在<form>容器内点击时,会触发表单默认的提交刷新逻辑,页面重载后Vue实例重新初始化,data中刚计算赋值的dec结果会被直接重置清空。
  • 额外提一句,现有代码通过document.getElementById直接获取DOM取值的写法不符合Vue响应式设计规范,后续迭代容易出现DOM取值和响应式数据不同步的问题,建议改用v-model做输入值双向绑定。
修复方案

任选以下一种方案即可解决刷新问题:

  • 给按钮点击事件加.prevent修饰符,Vue会自动帮你阻止默认提交行为,无需手动写事件拦截逻辑:
    <button type="submit" @click.prevent="toArray">Converter</button>
    
  • 直接把按钮的type属性从submit改为button,普通类型按钮不会触发表单提交动作:
    <button type="button" @click="toArray">Converter</button>
    
  • 如果后续需要保留form标签做表单校验类逻辑,可以直接在form标签上全局阻止默认提交:
    <form class="Contador" @submit.prevent>
    
符合Vue规范的优化后完整组件代码
<template>
    <div class="bar">
        <input id="str" type="text" v-model="inputStr" placeholder="请输入二进制字符串">
        <button type="button" @click="toArray">Converter</button>
        <div id="exit">转换结果(十进制):{{dec}}</div>
    </div>
</template>

<script>
export default {
    data(){
        return {
            inputStr: '',
            arr: [],
            dec: ''
        }
    },
    methods: {
        toArray(){
            // 增加二进制合法性校验,避免非法输入计算出错
            if(!/^[01]+$/.test(this.inputStr.trim())){
                alert('请输入合法二进制值,仅允许包含0和1')
                return
            }
            this.arr = this.inputStr.split("").map(item => Number(item))
            let decimal = 0;
            for(let i = 0; i < this.arr.length; i++){
                decimal += this.arr[i] * (2 ** (this.arr.length - i - 1))
            }                   
            this.dec = decimal
        }
    }
}
</script>

父组件代码无需调整,替换组件代码后即可正常使用,点击转换按钮不会再出现页面刷新、结果消失的问题。

内容的提问来源于stack exchange,提问作者Hermes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:54:19