Цитата:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<style type="text/css">
.too{
display: none;
}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$.fn.plugin = function () {
return this.each(function (index, self) {
$(this).click(function (e) {
$('.too').show();
});
$('.too').click(function (e) {
$(this).hide();
});
})
}
</script>
<script type="text/javascript">
$(window).load(function(){
$(".box").plugin();
});
</script>
<title></title>
</head>
<body>
<button class="box">is box</button>
<div class="too">is too</div>
</body>
</html>
не вижу проблемы |
Ничего не понимаю почему тогда у меня не работает как надо:
(function($) {
$.fn.plugin2 = function(options) {
return this.each(function() {
var $this = $(this);
var setting = $.extend({
}, options);
$this.click(function(){
$('.too').show();
});
$('.too').click(function(e){
$this.hide();
});
});
};
}) (jQuery);
Может тут я что-то пропустил? |
prison47,
строка 20 там нет $(this) у вас. |
Как нет я же в 7 строке определил var $this = $(this);
|
prison47,
так значение переменной и есть в 20 строке а по новой this никто определять небудет |
Спасибо большое так заработало но я не совсем понял, почему именно $this не приняло $(this). Если не сложно не могли бы вы объяснить ?
|
prison47,
var $this = $(this); эта строка равна для примера var $this = $('.box').eq(0); $this.hide(); тогда станет $('.box').eq(0).hide(); может кто доходчивее обьяснит. http://learn.javascript.ru/this |
Теперь кажется я понял. БОЛЬШОЕ вам спасибо:)
|
Эх появилась еще одна дилемма. Помогите пожалуйста разобраться. Делаю плагин появления окон уведомления. Так вот появление этих окон вешаю на кнопку с определенным атрибутом, все работает. Добавляю в документ еще одну кнопку, тоже все работает. Но теперь $(this) уже дублирует элементы. То есть например стоит обработчик нажатия на кнопку, нажимаем, появляется окно(див) в него добавляется ново созданный див тоже с обработчиком клика. Так вот теперь новый див реагирует на this в двойне. То есть плагин как бы вызывается два раза. И не получается например повесить на него условие с проверкой такого плана:
if(!$(this).attr('data-toggle') || $(this).attr('data-toggle') == 'off'){
$(this).attr('data-toggle','on');
$(this).parent('[data-case]').css('height', ptopHeight).addClass('clear-p');
} else if ($(this).attr('data-toggle') == 'on'){
$(this).attr('data-toggle','off');
$(this).parent('[data-case]').css({'height': '200px', 'visibility': 'visible'});
};
Пo умолчание data-toggle стоит off Получается двойное срабатывание. Как то это можно обойти? |
Попробовал в таком случае обращаться до
return this.each(function() {
И все заработало как надо. Но такое ощущение что это не правильно. |
| Часовой пояс GMT +3, время: 11:52. |