Подтвердить что ты не робот

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), как я его изначально написал?

4b9b3361

Ответ 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

Сообщите мне, если это поможет!