Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.03.2013, 09:47
Аспирант
Отправить личное сообщение для constantant Посмотреть профиль Найти все сообщения от constantant
 
Регистрация: 30.07.2008
Сообщений: 87

Кто знает как реализовано всплытие Submit в jQuery?
Кто знает как реализовать кросс-браузерное (IE7, IE8) всплытие события Submit и ему подобных(которые не всплывают)? В jQuery это реализовано. Хотелось бы понять принцип такой реализации.

Спасибо.

Последний раз редактировалось constantant, 19.03.2013 в 19:31.
Ответить с цитированием
  #2 (permalink)  
Старый 18.03.2013, 12:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Разве это не будет работать где-то ?
<form>
    <button type="submit">Засабмитить</button>
</form>
<script>
    var handler = function (e) {
        alert ('Всплыло!');
        if (e.preventDefault) {
            e.preventDefault();
        } else {
            e.returnValue = false;
        }
    }
    
    if ('addEventListener' in document) {
        document.addEventListener('submit', handler);
    } else {
        document.attachEvent('onsubmit', handler);
    }
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 19.03.2013, 16:15
Аспирант
Отправить личное сообщение для constantant Посмотреть профиль Найти все сообщения от constantant
 
Регистрация: 30.07.2008
Сообщений: 87

Сообщение от danik.js
Разве это не будет работать где-то ?
Да, в ишаке версий 7 и 8 не будет)
Ответить с цитированием
  #4 (permalink)  
Старый 19.03.2013, 16:42
Аватар для zilker
Профессор
Отправить личное сообщение для zilker Посмотреть профиль Найти все сообщения от zilker
 
Регистрация: 30.07.2011
Сообщений: 189

А исходники jQuery закрыты чтоли?

// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
	// Beware of CSP restrictions ([url]https://developer.mozilla.org/en/Security/CSP[/url]), test/csp.php
	for ( i in { submit: true, change: true, focusin: true }) {
		div.setAttribute( eventName = "on" + i, "t" );

		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
	}


// IE submit delegation
if ( !jQuery.support.submitBubbles ) {

	jQuery.event.special.submit = {
		setup: function() {
			// Only need this for delegated form submit events
			if ( jQuery.nodeName( this, "form" ) ) {
				return false;
			}

			// Lazy-add a submit handler when a descendant form may potentially be submitted
			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
				// Node name check avoids a VML-related crash in IE (#9807)
				var elem = e.target,
					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
					jQuery.event.add( form, "submit._submit", function( event ) {
						event._submit_bubble = true;
					});
					jQuery._data( form, "submitBubbles", true );
				}
			});
			// return undefined since we don't need an event listener
		},

		postDispatch: function( event ) {
			// If form was submitted by the user, bubble the event up the tree
			if ( event._submit_bubble ) {
				delete event._submit_bubble;
				if ( this.parentNode && !event.isTrigger ) {
					jQuery.event.simulate( "submit", this.parentNode, event, true );
				}
			}
		},

		teardown: function() {
			// Only need this for delegated form submit events
			if ( jQuery.nodeName( this, "form" ) ) {
				return false;
			}

			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
			jQuery.event.remove( this, "._submit" );
		}
	};
}
Ответить с цитированием
  #5 (permalink)  
Старый 19.03.2013, 16:55
Аспирант
Отправить личное сообщение для constantant Посмотреть профиль Найти все сообщения от constantant
 
Регистрация: 30.07.2008
Сообщений: 87

Сообщение от zilker
А исходники jQuery закрыты чтоли?
мне интересен алгоритм, то есть достаточно просто рассказать на словах, а в коде можно копаться до бесконечности
Ответить с цитированием
  #6 (permalink)  
Старый 19.03.2013, 17:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

В jquery своя система событий. Там и реализовали всплытие. Вот если бы через attachEvent всплытие срабатывало, то тогда было бы интересно...
Ответить с цитированием
  #7 (permalink)  
Старый 19.03.2013, 17:09
Аватар для zilker
Профессор
Отправить личное сообщение для zilker Посмотреть профиль Найти все сообщения от zilker
 
Регистрация: 30.07.2011
Сообщений: 189

1. jQuery проверяет что браузер не поддерживает всплытие submit
2. jQuery эмитирует всплытие

Вот вам и алгоритм. Без копания в коде и без понимания внутреннего механизма событий jQuery все равно не разобраться.
Ответить с цитированием
  #8 (permalink)  
Старый 19.03.2013, 22:57
Аспирант
Отправить личное сообщение для constantant Посмотреть профиль Найти все сообщения от constantant
 
Регистрация: 30.07.2008
Сообщений: 87

Сообщение от zilker
Без копания в коде и без понимания внутреннего механизма событий jQuery все равно не разобраться
Поправил пост, а то действительно как-то узко я спросил. Вопрос не в jQuery конкретно, а в принципе в общем.
Ответить с цитированием
  #9 (permalink)  
Старый 20.03.2013, 08:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

http://stackoverflow.com/questions/3...-submit-events
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать плагин jQuery в виде объекта? SkaN jQuery 12 28.06.2012 12:31
Ребята помогите правильно реализовать цепочки функций как в jquery mrgordon Общие вопросы Javascript 6 04.06.2012 20:40
Как правильно подключать jQuery? Hurray jQuery 2 26.04.2012 13:03
Можно ли в jQuery селектор вставлять перменные и как? jsuse jQuery 2 04.12.2011 01:27
Может кто подсказать как можно сделать submit из левого фрейма в правый maxander Internet Explorer 1 28.11.2008 10:15