.new() 在 jQuery 點擊處理程序中不起作用
我將 truffle 與 testrpc 一起用作我的 Dapp 開發平台。當我嘗試使用 .new() 方法創建契約的新實例時,我在將這個新契約實例的契約詳細資訊列印到瀏覽器的 JS 控制台中的 console.log 時遇到問題。具體來說,我通過使用 jquery click() 方法來觸發 .new() 方法的呼叫,該方法接收瀏覽器中合約建構子參數的值。我正在使用的程式碼包含在 index.html 文件中引用的 app.js 文件中,如下所示:
$("#clickButton").click(function() { var accounts = web3.eth.accounts; var Param1 = parseInt($("input#param1").val()); var Param2 = parseInt($("input#param2").val()); var Param3 = parseInt($("input#param3").val()); console.log(Param1,Param2,Param3) var myContractInstance=myContract.new(Param1,Param2,Param3,{ from: accounts[0]}); console.log(myContractInstance); myContractInstance .then(function(contract) { console.log('Contract created', contract) }) .catch(function(err) { console.log('Error', err) });
我在 JS 控制台中得到的列印輸出如下(注意:我的 Param1、Param2 和 Param3 值的輸入值分別為 1111,222 和 3333:
1111 222 3333 Promise {_bitField: 0, _fulfillmentHandler0: undefined, _rejectionHandler0: undefined, _promise0: undefined, _receiver0: undefined…} 錯誤錯誤:無效的 JSON RPC 響應:“”(…)
很明顯,這些值正在被正確使用(因為它們正在被列印出來)。此外,很明顯正在創建 promise 對象(因為它也已正確列印出來)。此後似乎出錯了。
但是,如果我將上面完全相同的程式碼複製並粘貼到瀏覽器 JS 控制台中,那麼我不會收到上面的錯誤,即契約按預期在 console.log 中列印出來,沒有問題。我很困惑為什麼如果我使用 jquery click() 方法會出現錯誤,但如果我將程式碼直接打入 JS 控制台,我不會收到錯誤消息。任何幫助深表感謝。
點擊按鈕的預設行為是送出表單。當您點擊該連結時,頁面會從表單送出刷新,從而中斷 web3 請求。
添加
return false
到點擊處理程序的末尾以防止預設瀏覽器操作,它將起作用。