1

我收到以下 java 脚本错误(间歇性) ”return” statement outside of function

以下是在我的 jQuery 代码中返回的函数。我想知道这个代码模式有什么问题?在一个函数中调用另一个函数是否有问题?有什么想法吗?

代码

function getSelectedParameters(parameterControl) {
    var selectedElements = $.map($(parameterControl + " option:selected"), function (el, i) {
        var code = getCode($(el).text());
        return code;
    });
    var parameter = selectedElements.join(",");
    if (isAnyParameterSelected == 0) {
        if (parameter.length > 0) {
            isAnyParameterSelected = 1;
        }
    }
    return parameter;
}
function getCode(selectedValue) {
    var firstIndex = selectedValue.lastIndexOf(":");
    var code = selectedValue.substring(0, firstIndex);
    return code;
}
4

4 回答 4

1
Try this:
function getSelectedParameters(parameterControl) {
    var selectedElements = [];
    $.each($(parameterControl + " option:selected"), function (el) {
        selectedElements.push(getCode($(el).text()));
    });
    if (isAnyParameterSelected == 0 && selectedElements.length > 0) {
       isAnyParameterSelected = 1;
    }
    return selectedElements.join(",");
}
于 2013-10-04T17:10:49.840 回答
1

我真的看不出你的语法有什么问题,但是这背后总有一些奇怪的潜在问题。也许这种方法会起作用,因为我正在从您的内部匿名函数中删除一个返回值,因为这可能与您的 return 语句相冲突。一年前我遇到过类似的问题,下面是您可以使用的解决方法。

function getSelectedParameters(parameterControl) {
    var selectedElements = new Array();
    $.map($(parameterControl + " option:selected"), function (el, i) {
        selectedElements = getCode($(el).text());
        return false; //edit this to make it false
    });
    var parameter = selectedElements.join(",");
    if (isAnyParameterSelected == 0) {
        if (parameter.length > 0) {
            isAnyParameterSelected = 1;
        }
    }
    return parameter;
}
function getCode(selectedValue) {
    var firstIndex = selectedValue.lastIndexOf(":");
    var code = selectedValue.substring(0, firstIndex);
    return code;
}

我正在做的是从 $.map 值中删除返回,使其返回为 false;同时,在 $.map 中,它分配给外部变量 selectedElements。

也许这会帮助或引导您朝着正确的方向前进。我对这段代码有点怀疑:

selectedElements = getCode($(el).text());

也许您可以执行 SR5 建议的推送方法:

$.each($(parameterControl + " option:selected"), function (el) {
    selectedElements.push(getCode($(el).text()));
});

我认为您正在尝试从中创建一个新数组?我希望我有更多的工作在这里..

如果您确实支持我的回答并使用 $.each 的 SR5 推送方法,请也支持 SR5 :-p

于 2013-10-04T19:53:00.953 回答
1

这不是您问题的答案,因为根据您问题中给定的代码,问题出在其他地方,但无论出于何种目的,您编写的代码(两个函数)都可以在这个函数中完成,还有其他方式也是如此,但这已经足够了,IMO。

function getSelected(el)
{
    var opt = $(el).find('option:selected'), l = opt.length, i = 0, arr = [], t;
    for(;i < l; i++) {
        t = $(opts[i]).text(), arr[i] = t.substring(0, t.lastIndexOf(":"));
    }
    isAnyParameterSelected = (isAnyParameterSelected == 0 && opt) ? 1 : 0;
    return arr.join(',');
}

确保该变量isAnyParameterSelected在函数执行范围内可用。您可以像这样调用函数:

getSelected('.sel') // A select with class 'sel'

检查this fiddle使用三个版本的相同功能但一个功能(更少代码)的一些示例。

于 2013-10-04T18:45:11.810 回答
0

感谢所有的答案...

当我删除另一个脚本时,错误不会出现 - href="javascript:return void(0);". 我想这就是问题所在

从以下:

  <a href="javascript:return void(0);" id="MoveSelectedItems" class="k-button">
    <img src="~/Images/move.png" height="18" width="18" /> 
    Move 
  </a>
于 2013-10-04T21:25:59.663 回答