2017-08-24 110 views
1

我想了解如何將一個值返回給一個函數中的jQuery調用中的一個屬性。javascript函數返回值不是如預期的那樣

我有一個解決方案,工作正常,但我想了解爲什麼我認爲應該工作,不。

我有一個帶有jQuery手風琴的ASP.NET頁面。我希望手風琴可以通過頁面上的隱藏值根據文件後面的代碼提供的值打開特定索引。

在我的測試中,我得到了這個例子的工作:

var index = $("#Content_Intro_hidAccordionIndex").val(); 
if (index == null) index = 0; 
else index = parseInt(index); 
$(".accordion").accordion({ 
    collapsible: true, 
    active: index, 
    event: "click hoverintent", 
    heightStyle: "content" 
}); 

然而,做這樣似乎不工作:

$(".accordion").accordion({ 
    collapsible: true, 
    active: function() { 
     var ret = $("#Content_Intro_hidAccordionIndex").val(); 
     if (ret == null) ret = 0; 
     else ret = parseInt(ret); 
     return ret; 
    }, 
    event: "click hoverintent", 
    heightStyle: "content" 
}); 

那麼,爲什麼它的工作第二辦法?

+0

我的猜測是活躍不指望了一項功能,它不知道它應該執行它...... – epascarello

+1

你正在使用哪個手風琴庫? 'active'屬性是否接受函數? –

+0

我只是使用jQuery UI的手風琴功能開箱即用。只要程序員(我)記得調用該函數,現在就工作得很好! :) – srHunter

回答

2

active預計是一個整數,而不是一個函數。這不是一個回調,它只是哪個選項卡應該處於活動狀態的值。

可以使用的功能,但該功能將需要立即調用和結果在整數值。像這樣:

$(".accordion").accordion({ 
    collapsible: true, 
    active: (function() { 
     var ret = $("#Content_Intro_hidAccordionIndex").val(); 
     if (ret == null) ret = 0; 
     else ret = parseInt(ret); 
     return ret; 
    })(), 
    event: "click hoverintent", 
    heightStyle: "content" 
}); 

只要整個操作結果爲一個整數值,它可以是任何你想要的內聯操作。但它必須被調用並導致該值。手風琴工具本身並不只是一個功能,並且不會嘗試執行該功能。

3

,因爲您分配一個function(而不是返回值)到具有成爲一個integeractive屬性它不工作。

爲了做到使其工作,你必須立即調用function(這就是所謂的IIFE(立即調用函數表達式))。

$(".accordion").accordion({ 
    collapsible: true, 
    active: (function() { 
     var ret = $("#Content_Intro_hidAccordionIndex").val(); 
     if (ret == null) ret = 0; 
     else ret = parseInt(ret); 
     return ret; 
    })(), 
    event: "click hoverintent", 
    heightStyle: "content" 
}); 
+0

這也是正確的,但大衛第一次。感謝Erazihel! – srHunter

0

活動沒有被設置爲你的函數的返回值,它被設置爲本身的功能,嘗試一下本作你的JavaScript

function setActive() { 
    var ret = $("#Content_Intro_hidAccordionIndex").val(); 

    if (ret == null) ret = 0; 
    else ret = parseInt(ret); 

    return ret; 
} 

$(".accordion").accordion({ 
    collapsible: true, 
    active: setActive(), 
    event: "click hoverintent", 
    heightStyle: "content" 
}); 
+0

也正確。謝謝喬! – srHunter