2014-06-16 2 views
7

Любые идеи, почему preventDefault не работает? Вот код ниже. , , Tks!preventDefault() не работает для события изменений

<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 

    $(document).ready(function() { 
     $("#text1").change(function(e) { 
      e.preventDefault(); 
     }); 
    }); 

function myFunc() { 
    alert("Random, annoying alert"); 
} 

</script> 
</head> 

Только один HTML элемент в виде:

<body> 
<form name="test" method="post"> 
    <input name="text1" id="text1" type="text" onchange="myFunc();"> 
</form> 
</body> 
+2

Вы, вероятно, имели в виду '$ (" # text1 ")' – blgt

+0

. У вас есть несколько ошибок в вашем примере, какие по умолчанию вы на самом деле ожидаете предотвратить? –

+0

Вы пытаетесь предотвратить отображение «Случайного, раздражающего»? Предполагаете ли вы, что myFunc() является значением по умолчанию, которое вы пытаетесь предотвратить? –

ответ

12

Вы не можете использовать preventDefault на событие изменения, потому что это не отменяемые:

$("#text1").change(function(e) { 
    alert(e.cancelable?"Is cancelable":"Not cancelable"); 
}); 

Свойства cancelable верно только о событиях, которые могут быть предотвращены.

+0

Большое спасибо. Иногда это самый очевидный материал, который является самым проблематичным! – SlimJim

+4

Так как это можно предотвратить? – Triynko

0

preventDefault() должен использоваться, чтобы предотвратить поведение по умолчанию элемента, поведение, которое по умолчанию запеченные в свой браузер.

Как, например, поведение тега привязки при нажатии происходит, чтобы инициировать последовательность событий, которые будут изменять строку url и отправлять HTTP-запрос (слишком упрощенное объяснение, которое я знаю).

С помощью evt.preventDefault(evt) внутри события click вы можете остановить поведение по умолчанию, чтобы вы могли выполнять другие операции до того, как вы выполните действие, или проигнорируйте все это вместе.

Проблема, которую я вижу в вашем примере, заключается в том, что поведение по умолчанию onchange состоит в том, чтобы отменить выбор окна ввода, не высветить его, и я не уверен, что это классифицируется как событие (я уверен, что это не так). Не для того, чтобы он мог остановить функцию, которую вы подключили onchange(). Infact, если вы должны были использовать preventDefault(), myFunc() точно, где он должен быть.

Для предотвращения события должен быть результирующий выход, что-то помимо изменения внешнего вида. например Щелчок тега, отправка формы, прокрутка контейнера.

Смежные вопросы