Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events ZK如何停止选项卡的OnClick事件?_Events_Onclick_Tags_Zk - Fatal编程技术网

Events ZK如何停止选项卡的OnClick事件?

Events ZK如何停止选项卡的OnClick事件?,events,onclick,tags,zk,Events,Onclick,Tags,Zk,我正在创建动态选项卡。我已经创建了第一个选项卡,然后是第二个选项卡等。当我处于第三个选项卡时,我希望用户不能选择其他选项卡,或者换句话说,用户将无法从一个选项卡移动到其他选项卡 我正在使用event.propagation;停止事件,但它不起作用。有人有其他解决方案吗?试试这个: 祖尔 TestComposer.java package test; import java.util.ArrayList; import java.util.Arrays; import java.util.Lis

我正在创建动态选项卡。我已经创建了第一个选项卡,然后是第二个选项卡等。当我处于第三个选项卡时,我希望用户不能选择其他选项卡,或者换句话说,用户将无法从一个选项卡移动到其他选项卡

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

试试这个:

祖尔

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
        }
    }
}
试试这个:

祖尔

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

如果我使用tabsetDisabledtrue,那么我无法在单击任何选项卡时触发任何事件。实际上,我想在不打开该选项卡的情况下显示单击任何选项卡的信息消息,该tabSolution很好,但我必须在java类中而不是在zul页面中进行此工作。是否有任何方法可以按照您在此处提到的方式执行任务。Benbai您能告诉我如何执行此操作吗从所选选项卡中删除事件侦听器。我已在此处发布此问题,但未获得正确答案。如果我使用tabsetDisabledtrue,则我无法在单击任何选项卡时触发任何事件。实际上,我想在单击任何选项卡时显示信息消息,但不打开该选项卡解决方案是好的,但我必须在java类中而不是在zul页面中执行此工作。是吗有任何方法可以像你们在这里提到的那个样完成任务。Benbai,你们能告诉我如何从所选选项卡中删除事件侦听器吗?我已经在这里发布了这个问题,但并没有得到正确的答案。