2013-05-16 3 views
0

У меня есть вопрос относительно jQuery. Я действительно новичок в jQuery или даже в javascript, поэтому, пожалуйста, несите меня.jQuery .on ('click') не работает с jQuery UI draggable

Я использую jQuery UI, перетаскиваемый на некоторых div в моем приложении. Проблема в том, что jQuery .on ('click'), похоже, не работает с этими div. Я попытался использовать .click(), и он работает. Тем не менее, divs будут создаваться динамически и, основываясь на том, что я узнал, лучше всего использовать .on(), когда мы хотим использовать динамически созданные элементы. Ниже мой HTML фрагмент:

<div class="book-page"> 
    <div class="draggable-text"> 
     <p>First text</p> 
    </div> 
    <div class="draggable-text"> 
     <p>Second text</p> 
    </div> 
</div> 

А вот это JQuery фрагмент:

$('div.draggable-text').draggable({ 
    cursor: 'move', 
    delay: 200, 
    containment: 'parent' 
}).resizable().selectable(); 

// This one doesn't work 
$('div.book-page').on('click', 'div.book-page > div.draggable-text', function() { 
    alert('clicked!'); 
    // some more coding here... 
}); 

// This one works 
/*$('div.book-page > div.draggable-text').click(function() { 
    alert('clicked!'); 
    // some more coding here... 
});*/ 

И, наконец, вот a link to a jsfiddle я создал. Я очень ценю любую помощь.

Спасибо! И извините за плохой английский.

ответ

1

Похоже, что у вас есть некоторые синтаксические ошибки со вторым.

Попробуйте это:

$('div.draggable-text').on('click', function() { 
    alert('clicked!'); 
    // some more coding here... 
}); 

Читать синтаксис JQuery 'на' события, чтобы лучше понять, что аргументы идут в http://api.jquery.com/on/

Ура.!

+0

Wow! Это делает трюк! спасибо! – taufnrsyd

+0

Ах, конечно, извините, я пропустил это, новичок здесь: D – taufnrsyd

+2

ну, я только что повторил его снова. Ваш ответ работает на элементы, которые уже созданы. Но это не работает для динамически созданных элементов. Это нужно немного настроить >> '$ ('div.book-page'). On ('click', 'div.draggable-text', function() {' см. Также в [my js fiddle] (http: //jsfiddle.net/arsyadtaufan/G75qs/). В любом случае, благодаря вашему ответу (и чтению документов) я могу решить свою проблему! – taufnrsyd

0

Jquery Синтаксис incorect попробуйте следующее:

$('div.draggable-text').on('click', function() { 
alert('clicked......'); 
// some coding here... 
}); 

Проверить здесь: http://jsfiddle.net/jS8sK/2/

-2

для дивов, который был создан динамически его лучше использовать .live для событий.

$('div.draggable-text').die('click').live('click', function() { 
alert('clicked......'); 
+3

Да , но '.live' устарел в jQuery 1.7+, а в документах jQuery предлагается использовать' .on' для _replace_ it. [http://api.jquery.com/live/](http://api.jquery. ком/жить /) – taufnrsyd

0

Если вы хотите связать событие click с динамически созданным перетаскиваемым элементом, ваша первая идея была почти правильной.

Вот фиксированный код: http://jsfiddle.net/G75qs/3/

$('.draggable-text').draggable({ 
    cursor: 'move', 
    delay: 200, 
    containment: 'parent' 
}).resizable().selectable(); 

//Bind click event for all element with class .draggable-text including 
//elements dynamically created 
$('.book-page').on('click', '.draggable-text', function() { 
    alert('clicked!'); 
    // some more coding here... 
}); 
1

Попробуйте это:

$('div.draggable-text').click(function(e){ 
e.preventDefault(); 
    alert('test'); 
});