Вы ничего не упускаете.В настоящее время среда выполнения, в частности действие watch()
, использует .live()
для регистрации обработчиков событий.sidetab()
съедает все обработчики событий с .live()
.sidetab()
съедает их, потому что .live()
на самом деле работает, прикрепляя ваш обработчик щелчков к объекту document
, а затем следит за появлением события.Когда он достигает document
, он проверяет, было ли зарегистрировано событие из элементов, соответствующих вашему селектору, и, если это так, запускает ваш обработчик.sidetab()
убивает это, вызывая event.stopPropagation()
, который останавливает всплытие события, поэтому оно никогда не достигает document
, поэтому ваш обработчик никогда не будет запускаться.
Это можно исправить, зарегистрировав обработчик событий с помощью служебной функции jQuery, .bind()
..bind()
будет регистрировать обработчик только для тех элементов, которые уже существуют, но если вы позаботитесь о том, чтобы элементы внутри вашей боковой таблицы существовали до того, как вы позвоните .bind()
, вы будетебыть в порядке.
Примерно так:
$K("#tester").bind("click", function() {
$K(this).effect("bounce", { "times" : 3 }, 300);
});
Давайте рассмотрим это в контексте всего приложения, не так ли?
Чтобы этот пример был простым, мы просто emit
javascript, необходимый для прикрепления нашего обработчика и получения отказов div при нажатии.Этот пример также доступен как гист :
ruleset a369x111 {
meta {
name "Sidetab->Events"
description <<
Sidetab jQuery
>>
author "AKO"
logging on
use javascript resource jquery_ui_js
}
global {
css <<
#tester {
margin-left: 10px;
margin-top: 10px;
width: 80px;
height: 80px;
background: green;
position: relative;
}
>>;
}
rule tab {
select when pageview ".*"
pre {
results = <<
<div id="tester"></div>
>>;
}
{
sidetab() with pathToTabImage = "http://dl.dropbox.com/u/10762217/search-tab-images/tab2.png"
and tabColor = "transparent"
and topPos = "50px"
and message = results
and divCSS = {
"z-index": 10000,
"backgroundColor": "#ffffff",
"width": "200px",
"padding": "0px",
"imageHeight": "162px",
"imageWidth": "53px",
"-moz-border-radius": "5px"
};
emit <|
$K("#tester").bind("click", function() {
$K(this).effect("bounce", { "times" : 3 }, 300);
});
|>;
}
}
}