diff --git a/index.js b/index.js index 6db68c1..37e1187 100644 --- a/index.js +++ b/index.js @@ -6,6 +6,7 @@ var forEachEls = require("./lib/foreach-els.js") var newUid = require("./lib/uniqueid.js") var noop = require("./lib/util/noop") +var contains = require("./lib/util/contains.js") var on = require("./lib/events/on.js") // var off = require("./lib/events/on.js") @@ -129,7 +130,7 @@ Pjax.prototype = { // Clear out any focused controls before inserting new page contents. // we clear focus on non form elements - if (document.activeElement && !document.activeElement.value) { + if (document.activeElement && !document.activeElement.value && contains(this.options.selectors, document.activeElement)) { try { document.activeElement.blur() } catch (e) { } diff --git a/lib/util/contains.js b/lib/util/contains.js new file mode 100644 index 0000000..9f169a7 --- /dev/null +++ b/lib/util/contains.js @@ -0,0 +1,12 @@ +module.exports = function contains(doc, selectors, el) { + for (var i = 0; i < selectors.length; i++) { + var selectedEls = doc.querySelectorAll(selectors[i]) + for (var j = 0; j < selectedEls.length; j++) { + if (selectedEls[j].contains(el)) { + return true + } + } + } + + return false +} diff --git a/tests/lib/util/contains.js b/tests/lib/util/contains.js new file mode 100644 index 0000000..533bbe2 --- /dev/null +++ b/tests/lib/util/contains.js @@ -0,0 +1,16 @@ +var tape = require("tape") + +var contains = require("../../../lib/util/contains.js") + +tape("test contains function", function(t) { + var tempDoc = document.implementation.createHTMLDocument() + tempDoc.body.innerHTML = "