2013-10-04 57 views
1

我收到以下java腳本錯誤(間歇性) 」return」 statement outside of functionjQuery代碼中的間歇性錯誤

以下是在我的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; 
} 
+0

你編譯代碼呢?你的工具鏈是什麼? –

+1

我不認爲你可以從匿名回調函數返回值 –

+3

它看起來很好 - 沒有什麼明顯的跳出來。當你得到錯誤時,它是否告訴你它在哪一行? – Archer

回答

0

感謝所有的答案..

當我刪除另一個腳本時出現錯誤 - href="javascript:return void(0);"。我想這是問題

從folllowing:

<a href="javascript:return void(0);" id="MoveSelectedItems" class="k-button"> 
    <img src="~/Images/move.png" height="18" width="18" /> 
    Move 
    </a> 
+0

參考:http://stackoverflow.com/questions/4657233/jquery-and-ie-not-playing-nice – Lijo

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

這不是一個回答你的問題,因爲這個問題是在別的地方根據您的問題,但不管出於什麼目的你寫的代碼給定的代碼(二函數),這可以在這一個函數內完成,還有其他方法,但這足夠了,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使用相同功能的三個版本,但一個功能(更少的代碼)的一些例子。

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價值的迴歸,使之恢復爲假;同時,在$ .map內,它將其分配給外部變量selectedElements。

也許這會幫助或引導你在正確的方向。我有點玄乎這個代碼:

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

也許你可以通過做SR5建議推法:

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

我想你想創建一個新的陣列出來呢?我希望我有更多與這裏工作..

如果給予好評我的答案,並用$。每次使用SR5的推送方法,請給予好評SR5以及:-P