Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-1.4.2.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <pre id="log"></pre>
  <form id="myform" method="post" action="/" onsubmit="return false;">
    <input type="text" name="testfield" value="testvalue">
    <button type="submit" id="submit">submit form</button>
  </form>
  <br/><br/>
  <button id="activate_extension">Activate Extension</button>
</body>
</html>
 
var init = function() {
  var log = function(str) {
    $("#log").append(str);
    $("#log").append("\n");
  };
  
  var init_extension = function() {
    // when activated, my extension tries to use addEventListener to intercept the form submission
    var form_submitted = function(event) {
      log("Submitted the form! (addEventListener handler)");
    };
    log("setting extension handlers!");
    var forms = document.querySelectorAll("form");
    for (i=0; i<forms.length; i++) {
      forms[i].addEventListener("submit", form_submitted, false);
    }
    
    // hijack jQuery event handlers if present
    if ($ !== undefined && $.event !== undefined && $.event.trigger !== undefined) {
      var orig_handler = $.event.trigger;
      var new_handler = function(event, data, elem) {
        var type = event.type || event;
        var eventObj = new Event(type);
        elem.dispatchEvent(eventObj);
        log("Event type: " + String(type));
        
        return orig_handler.apply(event, arguments);
      };
      
      $.event.trigger = new_handler;
    }
  };
  log("Init");
  // the page's submission handler calls stopPropagation & preventDefault before returning false
  var ajaxSubmit = function(event) {
    log(event);
    event.stopPropagation();
    event.preventDefault();
    log("Submitted the form! (jQuery delegate handler)");
    return false;
  };
  
  // the page's JavaScript sets a handler with delegate next:
  $("body").delegate('form', "submit", $.proxy(ajaxSubmit, this));
  
  // and then overrides the behavior of the submit button to trigger "submit" on the form via jQuery
  $("body").delegate("#submit", "click", function(a){
    $(this.form).trigger("submit", {
      target: a.target
    });
    return false;
  });
  
 document.querySelector("#activate_extension").addEventListener("click", init_extension);
}();
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
zbucpro
0viewers