如何以编程方式触发click事件?

时间:2010-09-26 21:38:56

标签: javascript events oracle-adf

我正在尝试使用javascript / jquery点击面板拆分器collaplse / expand按钮,但无济于事。

以下是拆分器的示例:http://jdevadf.oracle.com/adf-richclient-demo/faces/components/index.jspx;jsessionid=GTYNMf7Mq2JD6L4v38yCdTh2HLplhJYLTGc1J1TjZFwmpZjcqh1n!-294683649?_afrLoop=28596129526428344&_afrWindowMode=0&_afrWindowId=null#%2Fcomponents%2FpanelSplitter.jspx%40

如您所见,当您单击带箭头的小按钮时,区域会崩溃。如果我尝试获取元素并单击它,则没有任何反应。

$("dmoTpl:innerVerticalSplitter::i").onclick()

如果我加载jquery脚本并触发click,也没有任何反应。我有点困惑这一切是如何工作的以及为什么忽略脚本点击。有什么想法吗?

5 个答案:

答案 0 :(得分:1)

我不使用JQuery,但这是一个使用vanilla javascript和<af:clientListener/>标记的示例。

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:af="http://xmlns.oracle.com/adf/faces/rich" xmlns:f="http://java.sun.com/jsf/core">
  <af:resource type="javascript">
    function toggleSplitter(evt) {
        comp = evt.getSource().findComponent('ps1');
        if (comp) {
            comp.setProperty("collapsed", !comp.getProperty("collapsed"));
        }
        else {
            alert('not found');
        }
    }
  </af:resource>
  <af:panelStretchLayout id="psl1">
    <f:facet name="center">
      <af:panelSplitter id="ps1">
        <f:facet name="first">
          <af:outputText value="First" id="ot1"/>
        </f:facet>
        <f:facet name="second">
          <af:panelFormLayout id="pfl1">
            <f:facet name="footer"/>
            <af:commandButton text="Toggle" id="cb1" immediate="true">
              <af:clientListener method="toggleSplitter" type="click"/>
            </af:commandButton>
            <af:outputText value="Second" id="ot2"/>
          </af:panelFormLayout>
        </f:facet>
      </af:panelSplitter>
      <!-- id="af_one_column_stretched"   -->
    </f:facet>
  </af:panelStretchLayout>
</jsp:root>
点击之前

展开:

alt text

点击后折叠:

alt text

答案 1 :(得分:0)

使用jQuery点击()不是onclick(),但是当我检查你的代码时,$不是jQuery。你确定这个页面上有jQuery吗?

答案 2 :(得分:0)

如果你知道事件处理程序,通常最好直接直接调用该方法,而不是尝试创建click事件。这是jQuery中的一个例子。

设置事件处理程序

var clickEventHandler = function(event) {
  ...
};

$('#some-button').click(clickEventHandler);

稍后以编程方式调用

clickEventHandler();

答案 3 :(得分:0)

您可以使用JQuery触发元素上的事件。请考虑下面的代码,它会触发各种事件。

$('#myElement').trigger('click');
$('#myElement').trigger('mousedown');
$('#myElement').trigger('touchstart');

答案 4 :(得分:0)

以编程方式展开/折叠af:panelBox,创建事件并以编程方式对其进行排队,如下所示。

要折叠 af:panelBox

DisclosureEvent discEvent = new DisclosureEvent(panelBoxCompObj, false);
discEvent.queue();

展开 af:panelBox

DisclosureEvent discEvent = new DisclosureEvent(panelBoxCompObj, true);
discEvent.queue();