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

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,提问作者Юрий Зайцев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:48:11