2009-06-13 10 views
0

this`参照 `固有の設定:無名関数はPHPから渡されたと私は静的関数でPHPクラスを持っている

<? 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を:何をしたいあなたを与えるあなたはこのすべてを出力、あなたはこの内部のスクリプトタグを追加することができますPHP関数では、

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

(私が理解できるものから)。

<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> 

しかし、私が指摘したい1つの以上のリソースあなたは、単に関数を宣言し、その中に「これ」であると、任意のオブジェクトを割り当てる方法に興味があるにしたい場合は、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