jQuery代码中的间歇性错误

时间:2013-10-04 16:34:36

标签: jquery

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

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

CODE

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 个答案:

答案 0 :(得分: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(",");
}

答案 1 :(得分: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

答案 2 :(得分: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推送方法,请upvote SR5 :-p

答案 3 :(得分: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>