从PHP传递的匿名函数并设置特定的`this`引用

时间:2009-06-13 17:58:26

标签: php javascript jquery this

我有一个带静态函数的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
  3. 使用Javascript:

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

1 个答案:

答案 0 :(得分: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>