2009-06-13 3 views
0

У меня есть класс PHP с статической функции:анонимная функция передается от PHP и установить конкретные `this` ссылки

<? echo view::getUserSelector() ?> 

который выводит:

<div id="user_selector"> 
    <div class="user"> 
     <h1>Username1</h1> 
     <a href="javascript:selectUser(this);">select</a> 
    </div> 
    <div class="user"> 
     <h1>Username2</h1> 
     <a href="javascript:selectUser(this);">select</a> 
    </div> 
</div> 

Что мне нужно сделать, чтобы сделать это возможным ?:

<? echo view::getUserSelector(array('onSelect' => 'function() { alert(this.id); }')); ?> 
  1. Как мне добавить onSelect -значение в зависимости от div#user_selector?
  2. Как мне позвонить div#user_selector.onSelect() с this ссылка как div#user_select?

Javascript:

function selectUser(anchor) { 
    //remove all 'selected' classes from $user_selector child divs 
    //add 'selected' class to parent div.user of anchor 
} 
+1

У вас есть противоречивые требования: «Я хочу, чтобы этот код выполнялся после выполнения selectUser(). ... И как мне выполнить эту функцию в функции selectUser()?» Вы не можете одновременно выполнять его * в * selectUser() * и * после selectUser(). Вы можете уточнить, что вы ищете? –

+0

Вы правы, я перефразировал проблему. Thanx – Ropstah

+0

, так как вы обычно не можете «выбрать» div, что вы представляете себе пользователем, чтобы «выбрать» его? – seanmonstar

ответ

1

В функции PHP, где вы выводите все это, вы можете добавить это внутри тегов сценария, который дает вам то, что вы хотите (от того, что я могу понять).

<script type="text/javascript> 
var uSelect = document.getElementById('user_select'); 
uSelect.onSelect = function() { 
    alert(this.id); 
} 

function selectUser(anchor) { 
    //remove all 'selected' classes from $user_selector child divs 
    //add 'selected' class to parent div.user of anchor 
    uSelect.onSelect(); 
} 
</script> 

Но, еще один ресурс, я хочу отметить, что если вы хотите, чтобы просто объявить функцию и любопытны, как присвоить любой данный объект быть «это» внутри него, функции Javascript должен методов call и apply.

Например: вы можете попробовать что-то подобное.

<script type="text/javascript> 
var onSelect = function() { 
    alert(this.id); 
} 

function selectUser(anchor) { 
    //remove all 'selected' classes from $user_selector child divs 
    //add 'selected' class to parent div.user of anchor 
    var node = anchor; 
    while(node && node.parentNode) { 
     if(node.getAttribute('id') == 'user_select') { 
      //apply(thisRef, argsArray) 
      //call(thisRef, arg1, arg2 [...]) 

      onSelect.apply(node); 
      break; 
     } 
     node = node.parentNode; 
    } 
} 
</script> 
+0

Хорошо, этот сорт работает! Благодаря! – Ropstah

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

  • Нет связанных вопросов^_^