Metamask调用send_eth函数无响应,以太坊交易问题求助
解决Metamask交易函数点击按钮无响应问题
我一眼就注意到了问题的核心——你的按钮是type="submit"类型,这会触发表单的默认提交行为:点击按钮后页面会立即刷新,直接打断了Web3和Metamask的交互流程,这就是为什么控制台直接运行函数没问题,但点击按钮就没反应的原因。
下面给你两种解决思路,还有几个额外的优化点:
方案一:修改按钮类型(最简单)
把按钮的type从submit改成button,这样就不会触发表单提交的默认行为了:
<button type="button" id="send_eth" onclick="send_eth()" class="btn btn-dark">Создать</button>
方案二:在函数里阻止默认行为
如果你必须保留submit类型的按钮,可以在点击事件里传入event参数,然后在函数中阻止默认行为:
<button type="submit" id="send_eth" onclick="send_eth(event)" class="btn btn-dark">Создать</button>
对应的JavaScript函数修改如下:
function send_eth(event) { // 先阻止表单默认提交,避免页面刷新 event.preventDefault(); var home_wallet = wallet(此处不便展示钱包地址,但地址正确); var value = document.getElementById("inputCost").value; console.log(value); // 重要:把输入的以太币金额转换成Wei单位 // web3的sendTransaction要求value参数是Wei,直接传输入值会导致金额极小(甚至为0) var valueInWei = web3.utils.toWei(value, 'ether'); web3.eth.sendTransaction({ from: web3.eth.accounts[0], to: home_wallet, value: valueInWei }, function(error, txHash) { // 优化回调函数,区分成功和失败的情况 if (error) { console.error("交易发起失败:", error); } else { console.log("交易已提交,哈希:", txHash); } }); }
额外的注意事项
- 确保Web3实例正确初始化:页面加载完成后再初始化Web3,避免未连接Metamask就执行交易:
window.addEventListener('load', () => { if (typeof web3 !== 'undefined') { // 复用Metamask提供的web3实例 web3 = new Web3(web3.currentProvider); } else { console.error("请先安装Metamask钱包!"); } }); - 检查用户输入的
value是否合法:比如添加判断,确保输入是有效的数字,避免因为非法值导致交易失败。
内容的提问来源于stack exchange,提问作者Юрий Зайцев
相关产品推荐
相关产品推荐

