2016-12-08 3 views
2

Вот мой простой XPage:OnClick событие для содержания Div

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:div 
     style="border-color:rgb(255,0,0);border-style:solid;border-width:thin" 
     id="div1" styleClass="divStyleClass1"> 
     <xp:label value="Label" id="label1" styleClass="labelStyleClass"> 
     </xp:label> 
     <xp:eventHandler event="onclick" submit="false"> 
      <xp:this.script><![CDATA[alert(thisEvent.target.className); 
if(thisEvent.target.className=="divStyleClass1"){ 
    thisEvent.target.className="divStyleClass2"; 
} else { 
    thisEvent.target.className="divStyleClass1"; 
}]]></xp:this.script> 
     </xp:eventHandler> 
    </xp:div> 
</xp:view> 

Я хочу изменить DIV styleClass на OnClick событие. И он отлично работает, пока я не нажму на любой элемент внутри DIV, например. на этикетке. Очевидно, thisEvent.target указывает на объект метки, и он терпит неудачу.

Итак, как исправить это, поэтому он изменяет класс стиля DIV независимо от того, где и что вы нажимаете внутри?

+0

Я не осведомлен о xpage. Однако из html и, например, jQuery Я знаю, что вы можете использовать функцию типа 'ближайшая'. Возможно, это поможет вам. (http://api.jquery.com/closest/) – AMartinNo1

+0

DIV id неизвестен. Таким образом, мне нужно использовать thisEvent.xxxxx –

ответ

5

Существует также возможность использовать currentTarget свойство события, а не target. currentTarget содержит узел, к которому привязан обработчик событий.


Если этого не достаточно, вы могли бы быть в состоянии сделать что-то вроде этого:

var target = thisEvent.target; 
while(target != null) { 
    if(target.nodeName == "DIV") { 
    break; 
    } 
    target = target.parentNode; 
} 

target будет содержать ближайший узел предка, который является ДИВ или null.

+0

Оба подхода хорошо работают для примера XPage для вопроса. –

+0

работает хорошо. Спасибо, Ouroborus ... –

0

Вместо проверки цели, проверить сам элемент:

var div = document.getElementById("div1"); 
if(div.className == "divStyleClass1") { 
    div.className = "divStyleClass2"; 
} else { 
    div.className = "divStyleClass2"; 
} 
+0

Я забыл упомянуть, что идентификатор DIV неизвестен. Он автогенерируется специальной формулой в режиме повторного управления. Так что это могут быть DIV1, DIV2, DIV3 и т. Д. –

+0

Вы уверены, что класс всегда один из этих двух? @JohnGlabb – Yaser

+0

Да, я знаю класс, с которым я хочу переключаться, когда вы нажимаете на DIV. Например. Я хочу изменить цвет фона DIV. Но код не работает, если вы нажмете на любой элемент внутри DIV –

Смежные вопросы