2 Stimmen

Wie man einen Parameter an eine Inline-Javascript-Funktion übergibt

Ich versuche, story_id in der innersten Inline-Funktion zu übergeben, aber seine immer 0, obwohl seine nicht 0 in der äußeren Funktion. Wie übergebe ich diesen Wert in?

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;
              }
            }
          );
        }
      );
    }
  );
}

7voto

Jason Orendorff Punkte 39655

Damit das funktioniert, müssen Sie nur diese Zeile ändern:

    function(task, story_id) {

dazu:

    function(task) {

Sie müssen story_id nirgendwo übergeben - sie ist bereits in der inneren Funktion enthalten!

0voto

Justin Niessner Punkte 235353

Sie haben keine. Die each-Methode nimmt die Funktionsdefinition und ruft diese Funktion dann für jedes Element im Array auf. Sie müssten Ihre eigene benutzerdefinierte each-Methode schreiben, wenn Sie die Inline-Funktionsdefinition verwenden möchten.

Für beide Lesbarkeit und Funktionalität, würde ich brechen die innerste Inline-Funktion und dann für jedes Element in der Liste, rufen Sie auf Ihre Funktion.

-1voto

Chad Grant Punkte 41992

Haben Sie ein Problem mit dem Scoping.

Schnelle Lösung: story_id als Global definieren.

var story_id;

function activateSearch() { ....

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X