2015-11-20 65 views
0

我正在实现一个密码管理器,如chrome扩展,它检测密码字段并尝试拦截提交函数。我想要的是:从提交表单中禁用提交输入jquery

  1. 用户点击“登录”在一个网站(说Facebook)。扩展内容脚本检测到密码和用户名的值
  2. 询问用户是否希望将登录凭证存储在管理器中
  3. 如果是,则存储凭证。

问题是在步骤2中,我试图阻止它提交,直到对话框返回用户操作,就像任何其他浏览器内置的密码管理器一样。但显然,preventDefault()不起作用,因为网页不断刷新就像调用curSubmit [0] .click()一样,这会使对话不断重现。

有什么想法是错的?我的代码部分是:

var inputs = document.getElementsByTagName("input"); 
for (var i=0; i<inputs.length; i++) { 
    if (inputs[i].type.toLowerCase() === "password") { 
    var curSubmit = $("input[type=submit]",inputs[i].closest('form')); 
    curSubmit[0].click(function(event){ 
     event.preventDefault(); 
    }); 

    curSubmit[0].onclick = function(){ 
     $('body').append('<div id="store-dialog" title="Store password?"><p>Do you want to store the login credentials?</p></div>'); 
     var buttons = $(".store-dialog").dialog("option", "buttons"); 
     $("#store-dialog").dialog({ 
      resizable: false, 
      height: "auto", 
      position: { my: "center", at: "center", of: window }, 
      modal: true, 
      buttons: { 
      "Yes": function() { 
       $(this).dialog("close"); 
      }, 
      "Not this time": function() { 
       $(this).dialog("close"); 
      }, 
      "Never": function() { 
       $(this).dialog("close"); 
      } 
      } 
     }); 
    } 
    } 
    break; 
} 
+0

你尝试把事件.preventDefault ()函数内你定义为onclick?我的意思是,这样做:'curSubmit [0] .onclick = function(event){event.preventDefault(); ...' – Squirrel

回答

0

语法你使用的click处理程序是无效的,因为curSubmit[0]不是一个jQuery对象,而是一个标准的DOM元素。

这是正确的:

  • curSubmit[0].onclick = function(e) { ...... };
  • curSubmit[0].addEventListener("click", function(e) { ...... });

至于停止尝试都clicksubmit事件整个火炮:

event.preventDefault(); 
event.stopPropagation(); 
event.stopImmediatePropagation();