jQuery .preventDefault();

时间:2012-01-04 16:45:38

标签: jquery preventdefault

我有一个2个jQuery脚本 - 一个在我添加.preventDefault之前,以及我添加.preventDefault后的同一个脚本的副本。 jQuery在最初工作,但不是在我添加.preventDefault()

之后

有效的初始脚本

$(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 

不起作用的脚本......

$(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()。第一个脚本运行良好,但第二个脚本失败。为什么?如果organizationalElement的值在现有记录上是idk,则我调用.preventDefault()方法。

@Andrew:澄清你的编辑...我应该修改我的脚本: ...

   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)对象上,我是否正在尝试展示如何编写它,因为我最初编写它?

3 个答案:

答案 0 :(得分:31)

您想要在事件对象上调用preventDefault,而不是this

$("select[title='organizationalElement']").focusout(function(e) {          
   if ($(this).val() !== "I don\'t know") {
     e.preventDefault();
   }
});

为了完整起见,请注意preventDefault会阻止此元素的默认操作 - 将页面导航到锚点的href属性的值,例如(我不是确定select的焦点输出的默认操作是什么,或者是否有一个焦点输出。 preventDefault 不会阻止冒泡。

如果你碰巧关心冒泡 - 我并不是说你必须从jQuery事件处理程序返回false,这既会阻止默认操作,也会阻止冒泡。

答案 1 :(得分:8)

preventDefault()功能与事件相关联。你应该叫什么:

e.preventDefault();

编辑根据您的评论澄清,您需要在函数调用中添加e作为变量:

$('selector').click( function(e) { e.preventDefault(); } );

您可以在jQuery preventDefault页面上详细了解。

答案 2 :(得分:4)

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

如果有帮助,请告诉我!