JQuery.preventDefault();
У меня есть 2 сценария jQuery - один, прежде чем я добавил .preventDefault и копию того же script после добавления .preventDefault. jQuery работает в исходном, но не после добавления .preventDefault()
Начальный script, который работает
$(window).load(function(){
$(document).ready(function(){
$("span[id$='_ff5_1']").each(function() { //returns a collection of elements that must be iterated through using each
if ($(this).text() == "Yes") { //test value returned from non-input field
clearID();
$("tr.anon").hide();
} else {
$("tr.anon").show();
}
});
if ($("select[title='action']").val() == "") {
$("tr.actDet").hide();
}
$("select[title='organizationalElement']").focusout(function() {
if ($(this).val() === "I don\'t know") {
alert("If no organizational element is selected, additional time may be required to route this request");
} // close if
$("select[title='action']").change(function(){
$(".actDet").toggle($(this).val()!= "");
}); // close action.change
});//close select.focusout
}); // close doc.ready
}); // close window.load
Script, который не работает...
$(window).load(function(){
$(document).ready(function(){
$("span[id$='_ff5_1']").each(function() { //returns a collection of elements that must be iterated through using each
if ($(this).text() == "Yes") { //test value returned from non-input field
clearID();
$("tr.anon").hide();
} else {
$("tr.anon").show();
}
});
if ($("select[title='action']").val() == "") {
$("tr.actDet").hide();
}
$("select[title='organizationalElement']").focusout(function() {
if ($(this).val() !== "I don\'t know") {
$(this).preventDefault();
} else {
alert("If no organizational element is selected, additional time may be required to route this request");
} // close if
$("select[title='action']").change(function(){
$(".actDet").toggle($(this).val()!= "");
}); // close action.change
});//close select.focusout-- close edit record stuff
}); // close doc.ready
}); // close window.load
Единственное изменение, которое я сделал, это исходный оператор if, который становится if/else, который вызывает .preventDefault(). Первый script отлично работает, но второй script терпит неудачу. Зачем? Я вызываю метод .preventDefault(), если значение элемента организации равно idk в существующей записи.
@Andrew: Чтобы уточнить ваше редактирование... Должен ли я пересмотреть свой script на:
...
if ($(this).val() !== "I don\'t know") {
$(this).click( function(e) { e.preventDefault(); } );
} else {
alert("If no organizational element is selected, additional time may be required to route this request");
} // close if
...
b/c Я отметил, что он будет работать правильно, если я изменю $(this).preventDefault(); к e.preventDefault();
Возможно, вы пытаетесь показать, как записать его, если я хочу привязать метод к объекту $(this), как я его изначально написал?
Ответы
Ответ 1
Вы хотите вызвать preventDefault
для объекта события, а не this
$("select[title='organizationalElement']").focusout(function(e) {
if ($(this).val() !== "I don\'t know") {
e.preventDefault();
}
});
Просто для полноты заметим, что preventDefault
предотвращает действие по умолчанию этого элемента - например, перемещение страницы на значение атрибута href для привязки (я не уверен, что действие по умолчанию для выбора фокуса, или даже там). preventDefault
не предотвращает пузырение.
Если вам небезразлично пузыриться - и я не говорю, что вы обязательно должны возвращать false из обработчика события jQuery, оба будут препятствовать действию по умолчанию, а также предотвращать пузыри.
Ответ 2
Функция preventDefault()
связана с событием. Вы должны позвонить:
e.preventDefault();
изменить, чтобы уточнить на основе вашего комментария, вам нужно добавить e
в качестве переменной в вызове функции:
$('selector').click( function(e) { e.preventDefault(); } );
Более подробную информацию можно найти на странице jQuery preventDefault.
Ответ 3
Метод preventDefault
должен применяться к объекту события, а не к объекту DOM, как вы его делаете.
Ваш код должен быть:
$("select[title='organizationalElement']").focusout(function(e) {
if ($(this).val() !== "I don\'t know") {
e.preventDefault();
} else {
alert("If no organizational element is selected, additional time may be required to route this request");
} // close if
$("select[title='action']").change(function(){
$(".actDet").toggle($(this).val()!= "");
}); // close action.change
});//close select.focusout-- close edit record stuff
Сообщите мне, если это поможет!