2012-12-10 41 views
1

我有一個簡單的代碼字符串。當頁面加載功能numResults()時,我想顯示一個默認值。在某些時候,我想用新值更新numResults(),然後在不重新加載頁面的情況下更改字符串。當值存在時更新變量

$('#step1').before('Showing results 1 - ' + numResults()); 

function numResults(value) { 
    var results = 10; // default number 

    if (value) { 
     return value; // show updated value 
    } else { 
     return results; // show default 
    } 
} 
+0

沒有AJAX參與,是嗎?請刪除標籤。 – Bergi

+0

你可以做一個typeof值!=='undefined'來檢查值是否被傳遞,如果沒有值傳遞顯示默認值。您可以獲取要傳遞的值,然後將其傳遞給該函數。 IMO看起來會更好,如果函數本身加載了值,然後確定顯示值||默認值 – frictionlesspulley

+0

你能澄清一下你正在嘗試做什麼嗎?你說'如果...值集',但你的函數返回值,如果它被設置。 – Kyle

回答

1

我認爲你可以利用此一jQuery.Callbacks object

// flags: store latest value, and prevent same callback adding multiple times 
var resultNumberChanged = $.Callbacks("memory unique"); 
resultNumberChanged.fire(10); // init with "default number" 

resultNumberChanged.add(function(val) { 
    $('#step1').before('Showing results 1 - ' + val); // update each time it changes 
}); // will also be fired immediately, as there is the default value already 

// then, at any point, e.g. inside the numResult function when there is a parameter 
… 
    resultNumberChanged.fire(newvalue); 
+0

我能夠通過一些修改來實現這一點,以做我所需要的。感謝您的幫助! –

2

這是一個典型的用例knockout.js。

運行在例如:http://jsfiddle.net/55fXu/1/

<div data-bind="text:numResults"/> 

<script> 
$(function() { 
    function AppViewModel() { 
    this.numResults = ko.observable(10); 
    } 

    ko.applyBindings(new AppViewModel()); 
}); 
</script> 
+0

我得到的是未定義的 –

+0

@JaredEitnier:當然,你需要加載淘汰賽。 – Bergi

0

首先,關閉,如果標籤之前,否則啓動。 好吧,如果你正在試圖做簡單的東西,試試這個:

$(function() { 
     $("#myText").val(numResults()); 

     $("#myButton").click(function(){ 
      $("#myText").val(numResults("123")); 
     }); 
    }); 

    function numResults(value) { 
     var results = 10; // default number 

     if (value) { 
      return value; // show updated value 
     } 
     else { 
      return results; // show default 
     } 
    }