Функция .on в jQuery не похожа на событие load - PullRequest
4 голосов
/ 05 января 2012

У меня есть полностью ajax-управляемый веб-сайт, поэтому в последнее время мне пришлось исследовать методы делегирования.Я узнал, что .live и .delegate устарели, и новая функция для использования - .on.

Если я динамически загружаю веб-страницу в раздел на текущей странице (AJAX), например, так:

<html>
<head>
<script src="jquery.js">
</script>
<script>
function ajaxTest()
{
    $('#content').load('test.php');
}
</script>
<script type="text/javascript">
$(function(){
    $(document).on("click", "#map", function(){
        alert("it has been loaded");
    });
});
</script>
</head>
<body>
    <div id="content">
        <button onClick="ajaxTest()" value="Click Me">
            This is to be clicked
        </button>
    </div>
</body>
</html>

, где test.php выглядит как

<html>
  <head>
  </head>
  <body>
    <div id="map">THIS IS THE MAP</div>
  </body>
</html>

Затем я могу нажать на слова «ЭТО КАРТА», и это действительно показывает предупреждение.Проблема, с которой я столкнулся, заключается в том, чтобы вместо:

$(document).on("**click**", "#map", function(){

мне нужно что-то более похожее на:

$(document).on("**load**", "#map", function(){

Очевидно, это не работает, поэтому яинтересно, может ли что-то подобное.Причина, по которой я даже спрашиваю об этом, состоит в том, что на некоторых страницах вместо того, чтобы просто «ЭТО КАРТА» в разделе карты, у меня есть карта Google или объект SWF или что-то еще.Буду признателен за любую помощь.

Если вы хотите просто ответить, как загрузить карту Google в раздел, который еще не существует, это также будет полезно;)

Ответы [ 2 ]

5 голосов
/ 05 января 2012

Только некоторые события всплывают в родительской цепочке и могут использоваться для родительских объектов с .on() или .live() или .delegate(). .load() не является одним из тех событий, которые пузыри.

Это неполный список событий, происходящих из документа jQuery: click, dblclick, keydown, нажатие клавиши, keyup, mousedown, mousemove, mouseout, mouseover и mouseup.

На странице документа для .on() приведена цитата:

Во всех браузерах событие загрузки не всплывает.

В вашем конкретном примере вы можете привязать событие непосредственно к объекту следующим образом:

$("#map").on("load", function(){});

или

$("#map").load(function(){});

Когда вы привязываете непосредственно к объекту, подобному этому, никакого всплытия не требуется, и оно будет работать с событием load. Объект #map должен существовать во время привязки обработчика событий, поскольку этот метод использования .on() или .load() не может работать с объектами, которые будут созданы в будущем. Обработчик события должен быть присоединен к объекту после создания объекта.

1 голос
/ 05 января 2012

если вы хотите что-то сделать, когда response равен loaded, вы можете использовать callback function в нагрузке вместо того, чтобы делать это в двух отдельных сценариях и привязке событий, что-то вроде

$('#content').load('test.php', function(){
alert("map is loaoded.")
});

ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...