【问题标题】:How to get return value as an object from a click function (Javascript)? [duplicate]如何从点击函数(Javascript)中获取作为对象的返回值? [复制]
【发布时间】:2022-01-01 01:48:06
【问题描述】:

我想通过单击button 从表格中获取单元格值。我已经使用在按钮上实现的 Javascript 制作了一个 getDetail 函数,但我无法从函数中返回值。

<button class='btn btn-secondary' onclick='getDetail()'>Detail</button>

这是我从表格中获取详细信息的 Javascript 函数:

function getDetail(){

        // get element value
        var table = document.getElementById("tableID");
        var myResult = {"db":"postgres"};

        if (table) {
            for (var i = 0; i < table.rows.length; i++) {
                table.rows[i].onclick = function() {
                    tableText(this);
                };
            }
        }

        function tableText(tableRow) {
            var schName = tableRow.childNodes[1].innerHTML;
            var tblName = tableRow.childNodes[2].innerHTML;
            var obj = {'table_name': tblName};

            return obj;
        }

        let myData = Object.assign(myResult, obj);
        console.log(myData);

        $.ajax({
            error:function (xhr, status, error) {
                var err_msg = ''
                
                for (var prop in xhr.responseJSON) {
                    err_msg += prop + ': ' + xhr.responseJSON[prop] + '\n';
                }
                console.log(err_msg)
            },

            success: function(){
                console.log(obj)
            }
        });
    }

我想将 obj 值作为对象返回。之后,我会将它与其他对象结合作为我的 AJAX 函数中的输入(稍后将结合 API 响应)

但是,我无法从前一个函数返回 obj 值。

错误

dashboard:511 Uncaught ReferenceError: obj is not defined
    at Object.success (dashboard:511)
    at c (VM10029 jquery.min.js:2)
    at Object.fireWith [as resolveWith] (VM10029 jquery.min.js:2)
    at l (VM10029 jquery.min.js:2)
    at XMLHttpRequest.<anonymous> (VM10029 jquery.min.js:2)

预期的按钮被点击时的输出:

{db: 'postgres', table_name: 'actor'}

你能帮我解决这个问题吗?因为我是 javascript 的新手。谢谢。

【问题讨论】:

  • table.rows[i].onclick事件中你不应该返回tableText(this);吗?我认为您实际上在那里缺少return。您的tableText 只是返回到匿名函数然后无处可去,即onclick 没有返回。
  • 你不能从 onclick 函数返回,因为你之前的函数不会在自身中间暂停并等待用户点击某些东西(除非你创建一个 Promise和await它)

标签: javascript ajax bootstrap-4


【解决方案1】:

你没有在函数调用中返回值

function getDetail(){

        // get element value
        var table = document.getElementById("tableID");
        var myResult = {"db":"postgres"};

        if (table) {
            for (var i = 0; i < table.rows.length; i++) {
                table.rows[i].onclick = function() {
          //modified code         
          return tableText(this);
                };
            }
        }

【讨论】:

  • 返回那里毫无意义。该值将始终是一个对象,并返回除 falseonclick 之外的任何内容。
猜你喜欢
  • 2014-02-12
  • 2019-10-13
  • 2016-01-07
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
相关资源
最近更新 更多