jQuery.preventDefault();

jQuery.preventDefault();,jquery,preventdefault,Jquery,Preventdefault,我有两个jQuery脚本-一个在我添加.preventDefault之前,另一个在我添加.preventDefault之后有一个相同脚本的副本。jQuery在首字母中起作用,但在我添加.preventDefault()之后不起作用 有效的初始脚本 $(window).load(function(){ $(document).ready(function(){ $("span[id$='_ff5_1']").each(function() { //retur

我有两个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语句变成调用.preventDefault()的if/else。第一个脚本非常有效,但第二个脚本失败。为什么?如果organizationalElement的值是现有记录上的idk,我将调用.preventDefault()方法

@安德鲁:为了澄清你的编辑。。。我是否应该将脚本修改为:

。。。 b/c我注意到如果我更改$(this).preventDefault(),它将正常工作;e.预防违约()


如果我希望像最初编写的那样将方法附加到$(this)对象,您是否正在尝试演示如何编写它?

您希望在事件对象上调用
preventDefault
,而不是
this

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

为了完整起见,请注意,
preventDefault
阻止此元素的默认操作,例如,将页面导航到锚点的href属性值(我不确定select的focusout的默认操作是什么,或者是否有)<代码>预防默认值防止冒泡

如果您碰巧关心冒泡,我并不是说您必须从jQuery事件处理程序返回false,这将既防止默认操作,又防止冒泡。

函数与事件关联。您应该拨打的电话是:

e.preventDefault();
编辑以根据您的评论进行澄清,您需要在函数调用中添加
e
作为变量:

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

您可以在页面上阅读有关中的更多信息。

在执行时,
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

如果有帮助,请告诉我

谢谢你,亚当。我知道preventDefault不会阻止事件冒泡,但是我不确定我是否不希望冒泡。这可能是导致整个jQuery脚本无法运行的原因吗?@jg100309-不,您最初的问题是,您在调用preventDefault而不是event对象。将事件对象传递给您的处理程序,并对其调用preventDefault,就像在我的回答中所说的那样:如果
字符位于两个
s之间,则不必转义它;
$("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