PHP geçti ve `bu` referans özgü ayarlanır anonim işlev

1 Cevap php

Ben bir statik fonksiyonu ile bir PHP sınıfı vardır:

<? echo view::getUserSelector() ?>

Hangi çıkışlar:

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

What do I need to do to make this possible?:

<? echo view::getUserSelector(array('onSelect' => 'function() { alert(this.id); }')); ?>
  1. Nasıl bir fonksiyonu olarak 'add' onSelect değerini do div#user_selector?
  2. Nasıl yapmam div#user_selector.onSelect() olarak this referans ile 'çağrı' 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
}

1 Cevap

PHP fonksiyonu, bütün bu nereye çıktı, sen (ben anlayabiliyorum ne) ne istediğinizi verir bu iç komut dosyası etiketleri eklemek olabilir.

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

Ama, ben işaret etmek istiyorum bir daha kaynaktır sadece işlev bildirmek istiyorum ve 'Bu' bunun içinde, Javascript fonksiyonları olan yöntemlere call {olmak için herhangi bir nesne atamak nasıl merak ediyorsa [(1)]} .

Örneğin: siz de böyle bir şey deneyebilirsiniz.

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