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()参考thisdiv#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>

但是,我想指出的另一个资源是,如果您想简单地声明函数并且想知道如何将任何给定对象分配为其中的“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 回答