A jquery selector

Get all the input or textarea that accept input

by de Montalembert Jonathan

HTML

disabled <input id="one" type="text" disabled="true" value="test"><br>
readonly <input id="two" type="text" readonly="readonly" value="test"><br>
editable <input id="three" type="text" value="test"><br>
editable but invisible <input id="four" type="text" value="test" style="display:none;"><br>
button <input id="five" type="button" value="test"><br><br><br>

disabled <textarea id="six" disabled="true"></textarea><br>
readonly <textarea id="seven"readonly="readonly"></textarea><br>
editable <textarea id="eight"></textarea><br>
editable but invisible <textarea id="nine" style="display:none;"></textarea><br>

JavaScript

$.expr[':'].canTypeIn = function(obj, index, meta, stack) {
		// immediately return false if the element is not visible or is read only
		if (obj.style.visibility === "hidden" || obj.style.display === "none" || obj.readOnly === true || obj.disabled) {
			return false;
		}
		
		// an array of input types that we know we can type in
		var types = [
			"date",
			"datetime",
			"datetime-local",
			"email",
			"month",
			"number",
			"password",
			"search",
			"tel",
			"text",
			"time",
			"url",
			"week"
		];
		
		// if the element is an input then check what type of input it is
		if (obj.tagName === "INPUT") {
			return types.indexOf(obj.type) !== -1;
		}
		
		if (obj.tagName === "TEXTAREA") {
			return true;
		}
		
		return false;
	};

console.dir($(":canTypeIn"));