events - ZK如何停止tab的OnClick事件?

标签 events onclick tags zk

我正在创建动态选项卡。我创建了 1st 选项卡,然后创建了 2nd 选项卡等。当我在 3rd 选项卡时,我希望用户无法选择其他选项卡选项卡,或者换句话说,用户将无法从一个选项卡移动到其他选项卡。

我正在使用event.propagation();来停止事件,但它不起作用。有没有人有其他解决方案?

最佳答案

试试这个:

祖尔

<zk>
    <div apply="test.TestComposer">
        <tabbox>
            <tabs id="tbs" />
            <tabpanels id="tps" />
        </tabbox>
        <button id="btn" label="add tab" />
    </div>
</zk>

TestComposer.java

package test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.*;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Button;
import org.zkoss.zul.Label;
import org.zkoss.zul.Tab;
import org.zkoss.zul.Tabpanel;
import org.zkoss.zul.Tabpanels;
import org.zkoss.zul.Tabs;

/**
 * Tested with ZK 6.0.2 and ZK Pivottable 2.0.0
 *
 */
@SuppressWarnings("rawtypes")
public class TestComposer extends SelectorComposer {
    @Wire
    Button btn;
    @Wire
    Tabs tbs;
    @Wire
    Tabpanels tps;
    List tabs = new ArrayList();
    int limit = 3;

    @Listen("onClick = #btn")
    public void onClick$btn () {
        if (tabs.size() < limit) {
            Tab tab = new Tab("Tab " + (tabs.size()+1));
            tab.setParent(tbs);
            tabs.add(tab);
            Tabpanel tp = new Tabpanel();
            new Label("Tabpanel " + tabs.size()).setParent(tp);
            tp.setParent(tps);

            if (tabs.size() == limit) {
                tab.setSelected(true);
                overrideBehavior();
            }
        }
    }
    public void overrideBehavior () {
        final Tab toSel = (Tab)tabs.get(tabs.size()-1);
        for (int i = 0; i < tabs.size() - 1; i++) {
            final Tab tab = (Tab)tabs.get(i);
            tab.addEventListener( // add an EventListener
                    "onClick", // listen to onClick event
                    new EventListener () { // create an EventListener instance to add
                        public void onEvent (Event event) { // the method will be called while onClick event triggered
                            Clients.evalJavaScript("zk.log('"+tab+"  clicked')");
                            toSel.setSelected(true); // make sure the third one is selected at server side
                        }
                    }
                );
                tab.setWidgetOverride("_sel", "function(notify, init) {return;}"); // prevent select at client side
        }
    }
}

关于events - ZK如何停止tab的OnClick事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372420/

相关文章:

visual-studio - 如何在 Visual Studio 之前处理按键?

javascript - 函数在第一次点击后表现异常

ruby-on-rails - 默认情况下使用作为可标记的行为按字母顺序排列标签

html - 创建可点击的嵌入标签

c# - 使用 "new EventHandler<T>"和不使用 new EventHandler<T> 的接线事件之间的区别?

c# - 双击后 Devexpress GridContol 检查值变化

php - 如何将php参数传递给javascript

java - 在 listView 中 onClick 之后创建一个对话框

python - BeautifulSoup 和 Python 删除 HTML 标签

java - 允许在 Swing 中的 postEvent 调用之间将事件发布到 EvenQueue 中