具有意外结果的 Javascript 函数参数

Javascript function parameter with unexpected result

本文关键字:Javascript 函数 参数 结果 意外      更新时间:2023-09-26

我有一个简单的javascript函数,可以打开一个模态对话框。如果我传递给它一些参数,它将毫无问题地打开。我正在使用jQuery在我的网站上启用一些键盘功能。基本上,用户将浏览一堆表格单元格,找到他们正在寻找的值并点击"Enter"。我有一个事件侦听器在等待键码 13。当它触发时,我从该单元格中获取 HTML,通过正则表达式运行它并拉出一个字符串。我获取该字符串并将其传递给我的javascript函数。

如果我将

值硬连线到函数中,它可以正常工作,如果我从正则表达式返回的字符串传递给它,它总是失败。如果我将硬连线值与正则表达式的结果进行比较,它们是 100% 相同的。我无法理解为什么该函数不会接受从正则表达式返回的变量。

Javascript函数:

function openDetail(event, newWindow, className, methodName, param, param1, param2) {
            param = (typeof param === "undefined") ? "defaultValue" : param;
            param1 = (typeof param1 === "undefined") ? "defaultValue" : param1;
            param2 = (typeof param2 === "undefined") ? "defaultValue" : param2;
            newWindow = (typeof newWindow === "undefined") ? "defaultValue" : newWindow;
            var windowName = '';
            if (newWindow == true) {
                windowName = '#openExtendedDetailWindow';
            } else {
                windowName = '#openDetailWindow';
            }
            param = param.trim();
            param1 = param1.trim();
            param2 = param2.trim();
            var page = "?url=" + className + "/" + methodName + "/" + param + "/" + param1 + "/" + param2;
            $(windowName).dialog({
                width: 'auto',
                height: 'auto',
                resizable: true,
                modal: true,
                position: 'center',
                open: function (event, ui) {
                    $(this).load(page, function () {
                    });
                },
                show: {
                    effect: 'fade',
                    duration: 800
                }
            });
            event.preventDefault();
        }

Javascript 用于我的数据网格和键下事件侦听器:

$(document).ready(function () {
        $('#warehouseSelection').change(function (event) {
            var warehouse = $('#warehouseSelection').val();
            window.location.replace("?url=FHInventory/index/" + warehouse);
            event.preventDefault();
        });
      var table = $('#contentTable').DataTable({
            "paging": false,
         "jQueryUI": true,
          "scrollX": true,
         columnDefs: [
         {
         targets: [ 0 ],
         orderData: [ 0, 1 ]
         },
         {
         targets: [ 1 ],
         orderData: [ 1, 0 ]
         },
         {
         targets: [ 4 ],
         orderData: [ 4, 0 ]
         }
         ]
        });
       $keys = new $.fn.dataTable.KeyTable( table );
        $("body").on("keydown",$("form.form-horizontal"), function (e) {
            if (e.keyCode == 13) {
                $url = $keys.fnGetCurrentData();
                alert($url);
                var regExp = /'(([^)]+)')/;
                var matches = regExp.exec($url);
                $params = matches[1];
                alert($params);
                openDetail(String($params));
            }
        });
    });

硬连线的 HTML(这有效),

<td>
<a class="masterTooltip" href="" title="Received" onclick="openDetail(event,false,'Inventory','receivedSpecificDate','27934','RADCH6LC0081', '20150117')">0</a>
</td>

如果你的函数调用参数包含在逗号分隔的列表中,从你的评论听起来像你这样做,你可以使用 split 将它们变成一个数组,splice在开始时添加事件对象,然后apply

$("body").on("keydown",$("form.form-horizontal"), function (e) {
    if (e.keyCode == 13) {
        $url = $keys.fnGetCurrentData();
        alert($url);
        var regExp = /'(([^)]+)')/;
        var matches = regExp.exec($url);
        $params = matches[1];
        alert($params);
        //this assumes that none of your parameters actually have a comma in
        //if they do, you'll need to split up the string into an array 
        //in a different manner
        //It also splices in the current event (e) to the first parameter
        openDetail.apply(this, $params.split(',').splice(0,0,e));
    }
});