我有一个带静态函数的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); }')); ?>
onSelect
- 值添加为div#user_selector
的函数?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
}
答案 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函数必须使用方法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>