2014-02-14 4 views
0

Как передать идентификатор функции в следующий код javascript?Как передать переменную функции в javascript

for(var i = 1; i<=10; i++){  
    var id = i; 
     $("#result-" + id).click(function(event){ 
     makeFeatureSelected(id, true); 
    }); 
} 

Таким образом, значение идентификатора всегда 11.

Спасибо.

+0

Подробнее о [закрытии] (http://stackoverflow.com/questions/111102/how-do-javascript-closures-work?rq=1) – Grundy

ответ

1

Элегантное решение может быть:

var makeFeatureSelected = function(id, val) { 
    console.log(id); 
} 

$('[id^="result-"]').on('click', function() { 
    var id = $(this).attr('id').split('-')[1]; 
    makeFeatureSelected(id, true); 
}); 

Объяснение

  • $ ('[ID^= "result-"] ') Селектор JQuery: выберите весь элемент с идентификатором, который начинается с string "result-"
  • $ (this) .attr ('id'). split ('-') [1]: разделиться идентификатор строки элемента, нажата и взять второе значение, в вашем случае id;

Plus
Если вы хотите сделать что-то только с 10 первым идентификатором, можно добавить, если блок для проверки идентификатора.

+1

Это решение работает, и оно гибкое, так как может быть меньше 10 результатов. Благодарю. –

0

Я думаю, это было бы просто так же просто, как передать ID в качестве параметра вашей функции.

for(var i = 1; i<=10; i++){  
    var id = i; 
     $("#result-" + id).click(function(event, id){ 
     makeFeatureSelected(id, true); 
    }); 
} 
0

Почему бы вам не просто извлечь его из удостоверения личности?

for(var i = 1; i<=10; i++){  

     $("#result-" + id).click(function(event){ 
     var id = $(this).attr('id').match(/\d+/)[0]; 
     makeFeatureSelected(id, true); 
    }); 
} 

Таким образом, вы можете пропустить цикл for и просто назначить класс всем результирующим элементам. Может быть, немного лучше?

0

В вашем идентификаторе фрагмента кода всегда 11 из-за замыкания, сформированного при определении функции в цикле. Это распространенная ошибка в javascript.

Путь вокруг этого заключается в дальнейшем использовании закрытий.

function makeSelectedCallback(id){ 
    return function(){ 
     makeFeatureSelected(id, true); 
    } 
} 

function yourExistingLoopLogic(){ 
    for(var i = 1; i<=10; i++){  
     var id = i; 
     $("#result-" + id).click(function(event){ 
      makeSelectedCallback(id, true); 
     }); 
    } 
} 

Есть прочитанный в Mozilla closure guide она охватывает замыкания подробно

Смежные вопросы