2014-11-04 59 views
0

我有一个按钮,用于在我的页面上执行搜索操作。我正在使用jquery对5位数的邮政编码进行简单验证。如果邮政编码无效,我正在使用preventDefault来停止运行搜索按钮。但是,preventDefault方法似乎不起作用。即使邮政编码未正确验证,它仍会运行搜索。preventDefault无法阻止按钮在我的课程文件中调用方法

这里是我的jQuery代码:

var j$ = jQuery.noConflict(); 

    j$(document).ready(function() { 
     var searchButton = j$('[id$=theFilterButton]'); 
     var isValid = true; 
     searchButton.click(function(e) { 
      var zip = j$('[id$="ZipCodeFilter"]').val(); 
      var reg = /^[0-9]+$/; 
      if((zip.length) < 5 || (zip.length) > 5) { 
       isValid = false; 
       console.log("zip code length is not 5"); 
      } 
      if (!reg.test(zip)){ 
       isValid = false; 
       console.log("zip is not digits"); 
      } 
      if(!isValid) { 
       console.log("zip is not valid. Stop processing!!!!"); 
       e.stopPropagation(); 
       e.preventDefault(); 
       return false; 
      } 
     });  
    }); 

不应该的preventDefault方法与调用我的代码在类文件停止按钮?

感谢您的任何帮助。 此致敬礼。

+0

没有看到你的html,你试过'返回false;'而不是'preventDefault'? – 2014-11-04 17:26:56

+0

不相关,但为什么不只是使用''#FilterButton''作为选择器? – 2014-11-04 17:30:07

+0

我试图用相同的结果返回false。我没有使用'#theFilterButton'作为选择器,因为它是Salesforce内的VF代码,您必须使用上述方法选择VF标签。 – Dman100 2014-11-04 17:31:54

回答

2

它只会阻止发生默认操作。如果在DOM树中有更高级的事件处理程序(比如父表单),那么处理提交表单(以及事件冒泡)preventDefault不会停止。

取而代之的是,你要调用stopPropagation(带或不带preventDefault,取决于默认操作)

return false也可使用,使用jQuery(这类似于调用preventDefaultstopPropagation)时。

以下是一个演示preventDefaultstopPropagation小提琴:

http://jsfiddle.net/1jfpkf1n/

第一方阵,如果单击内,将引发两个警报(如果内部广场上的链接 - 该网页将无法浏览,但外部事件侦听器仍然被称为...)

第二个方块,当您单击内部框时,将警报但停止事件冒泡(感谢stopPropagation)。

+0

嗨,杰克,谢谢你的回应。我试着使用'stopPropagation','preventDefault'和'return false'的组合,并在调试中进入最后一个分支,它检查zip是否有效。日志显示'zip无效。停止处理!!!!'。但是,搜索仍在运行。我正在查看一些代码,我做了完全相同的事情,它工作正常。我不确定我错过了什么? – Dman100 2014-11-04 17:58:50

相关问题