首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery .preventDefault();

jQuery .preventDefault();
EN

Stack Overflow用户
提问于 2012-01-05 00:45:38
回答 2查看 37.3K关注 0票数 14

我有两个jQuery脚本--一个在我添加.preventDefault之前,一个在我添加.preventDefault之后。jQuery在开始时有效,但在我添加.preventDefault()之后就不起作用了。

有效的初始脚本

代码语言:javascript
复制
$(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 

不起作用的脚本...

代码语言:javascript
复制
$(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()方法。

@Andrew:为了澄清你的编辑...我是否应该修改我的脚本以:...

代码语言:javascript
复制
   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)对象,您是否正在尝试演示如何编写它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-05 00:48:02

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

代码语言:javascript
复制
$("select[title='organizationalElement']").focusout(function(e) {          
   if ($(this).val() !== "I don\'t know") {
     e.preventDefault();
   }
});

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

如果您碰巧关心冒泡--我并不是说您一定应该关心--从jQuery事件处理程序返回false既可以防止默认操作,也可以防止冒泡。

票数 32
EN

Stack Overflow用户

发布于 2012-01-05 00:49:20

preventDefault方法应该应用于事件对象,而不是您正在做的DOM对象。

你的代码应该是:

代码语言:javascript
复制
$("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

如果有帮助,请让我知道!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8730505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档