2014-10-30 2 views
0

Что касается 1.7, то живое событие устарело - я использую в настоящее время версию 1.11.1 jquery. Теперь также в документах говорится, что для 1.9 jquery live был удален - отлично от меня. Для следующего случаяjquery 1.11.1 - live vs on

<script type="text/javascript"> 

    $(document).ready() 
{ 
    $("#submitFile").live('click', function (e) { 
     alert('button clicked'); 
     e.preventDefault(); 
     alert(1); 
    }); 

    $('#fileCtrl').live('change', function (event) { 
     alert(1); 
    }); 

    <!-- this was a typo from--> 
    $('#fileCtrl').live('on', function (event) { 
     alert(1); 
    }); 

} 
</script> 



<div id="uploadDiv"> 
    <input name="import" value="import" type="file" id="fileCtrl" /> 
    <input type="submit" value="export" id="fileupload" /> 
</div> 

для моего текущего проекта я должен был повторно использовать живой. Событие «on» просто не срабатывает. любая причина почему? Я пробовал жить, и это работает, событие, которое оно говорит о документе, что оно было удалено на версии 1.9. Любой совет по этому вопросу? Почему жизнь все еще работает и почему «на» нет?

Заранее спасибо.

+0

Там нет 'on' события. 'on' - метод для объектов jQuery. –

+0

Можете ли вы предоставить реальный код, который вы пишете, поскольку пример кажется вводящим в заблуждение и не показывает фактическую проблему, которую вы пытаетесь решить? Вероятно, вы не будете использовать 'on' * или *' live' в этой простой ситуации. –

+0

@ Vohuman: Здесь нет динамической нагрузки, поэтому эти «дубликаты» не подходят. –

ответ

4

Вам нужно будет повторно назначить стек вызовов. Это означает, что вы должны быть ориентированы на родительский узел, который способен перехватывать все click события, которые вы желаете и связать его как

$('the_parent_node_probably_document_body').on('click', '#submitFile', function(e) { 
}); 

с, что сказал, что на самом деле не имеет большого смысла делегировать какое-либо событие из идентификатора -selector, так как он появится только один раз в вашей разметке, вы действительно хотите делегировать события из многих узлов. Поэтому я сейчас запутался.

+0

Поскольку элементы не являются динамическими, использование 'live' или' on' кажется ненужным для начала (и, конечно же, не требует делегированного обработчика событий). Вы здесь не единственная путаница :) –

0

Элемент не имеет события 'on'.

$('#fileCtrl').live('change', function (event) { 
    alert(1); 
}); 

$('#fileCtrl').live('on', function (event) { 
    alert(1); 
}); 

Ваш код означает ту же самую реакцию при запуске события 'change' или 'on'. Может быть, вы перепутали событие «change» с «on»?

+0

Я скучаю по копиям. –

0

on - это функция, а не событие DOM. Это событие до сих пор называется «изменением»:

$('#fileCtrl').on('change', function (event) { 
    alert(1); 
}); 
+0

он работает так. на самом деле это была моя первая попытка - я затем перешел на использование «живой» - что работает. –

0

Как показан в простом образце, вы не удосужились использовать live или on (ваш третий пример, как представляется ошибка, так как нет on события on есть. метод jQuery). У вас также есть отсутствующий function и закрывающая скобка на вашем готовом обработчике DOM.

например. использовать обычный click и изменить methods:

$(document).ready(function() 
{ 
    $("#submitFile").click(function (e) { 
     alert('button clicked'); 
     e.preventDefault(); 
     alert(1); 
    }); 

    $('#fileCtrl').change(function (event) { 
     alert(1); 
    }); 
}); 

Обратите внимание на последний пример неверен для этой версии, поэтому я исключил его.

Если вы действительно хотите использовать on, новый синтаксис будет:

$(document).ready(function() 
{ 
    $("#submitFile").on('click', function (e) { 
     alert('button clicked'); 
     e.preventDefault(); 
     alert(1); 
    }); 

    $('#fileCtrl').on('change', function (event) { 
     alert(1); 
    }); 
}); 

И, наконец, если элементы добавляются к странице динамически, используйте делегированные обработчики событий, подключенные к не- (документ по умолчанию):

$(document).ready(function() 
{ 
    $(document).on('click', "#submitFile", function (e) { 
     alert('button clicked'); 
     e.preventDefault(); 
     alert(1); 
    }); 

    $(document).on('change', '#fileCtrl', function (event) { 
     alert(1); 
    }); 
}); 

Re: DOM готовые обработчики. Существует быстрый ярлык для DOM, который просто:

$(function(){ YOUR CODE HERE }); 
0

Я нашел свою ошибку !!!

Это была документация, готовая декларация - как глупо от меня!

$(document).ready() 
{ 

insetead из $ (документ) .ready (функция()

спасибо всем :)

+2

В следующий раз прочитайте комментарии и сэкономьте час. –

+0

Да, вы найдете это в моем ответе ниже. Пожалуйста, найдите время, чтобы прочитать все ответы, чтобы люди продолжали их предоставлять :) –