0

静的関数を持つ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の関数として-valueを「追加」するにはどうすればよい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
}
4

1 に答える 1

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>

しかし、私が指摘したいもう 1 つのリソースは、単に関数を宣言したい場合で、特定のオブジェクトをその内部で「this」に割り当てる方法に興味がある場合、Javascript 関数はメソッドcallapply.

たとえば、次のようなことも試すことができます。

<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>
于 2009-06-13T19:05:20.160 に答える