2009-04-23 18 views
2

Ich versuche story_id in die innerste Inline-Funktion zu übergeben, aber es ist immer 0, obwohl es nicht 0 in der äußeren Funktion ist. Wie gebe ich diesen Wert ein?Wie man einen Parameter an eine Inline-Javascript-Funktion übergeben

function activateSearch(){ 
    if($('story_filter')) Event.observe('story_filter', 'keyup', 
    function(event) { 
     $('stories_table').select(".story").each(
     function(story) { 
      story_id = story.id.split('_')[1]; 
      story.select('.tableCell', '.indexCardContent').each(
      function(task, story_id) { 
       hideStoryRow(story_id); 
       task_filter = new RegExp($F('story_filter'), "i"); 
       if (task.innerHTML.match(task_filter)) 
       { 
        showStoryRow(story_id); 
        throw $break; 
       } 
      } 
     ); 
     } 
    ); 
    } 
); 
} 

Antwort

7

Alles, was Sie tun müssen, um diese Arbeit zu machen, ist diese Zeile:

function(task, story_id) { 

dazu:

function(task) { 

Sie müssen überall nicht passieren story_id - es ist bereits im Rahmen in der inneren Funktion!

-1

Sie haben ein Scoping-Problem.

schnell beheben: story_id als global definieren.

var story_id; 

function activateSearch() { .... 
+0

Variable 'story_id' * ist * bereits global, da sie hier ohne die' var' Anweisung eingeführt wurde. –

+0

Wäre eine bessere Frage gewesen, wenn Sie das in Ihrem Beispielcode gezeigt oder erklärt hätten. –

0

Sie nicht. Jede Methode übernimmt die Funktionsdefinition und ruft diese Funktion dann für jedes Element im Array auf. Sie müssten Ihre eigenen Methoden für jede Methode schreiben, wenn Sie die Inline-Funktionsdefinition verwenden möchten.

Für beide Lesbarkeit und Funktionalität würde ich die innerste Inline-Funktion ausbrechen und dann für jedes Element in der Liste zu Ihrer Funktion aufrufen.

Verwandte Themen