I'm new to jquery, and am looking for a good unobtrusive way to add a jquery replacement for javascript "confirm" to a HTML elements. Specifically I want to be able to use it for ASP.NET Buttons, LinkButtons, ImageButtons, HyperLink etc, which client-side means any of:
<input type="submit"... />
<a href="javascript:__doPostBack... />
<input type="image"... />
... etc ...
A solution I've come up with is to add a custom attribute to the ASP.NET server control (and hence to the client element), e.g.:
<asp:ImageButton ... data-confirmPrompt="OK to delete customer 123?" ... />
which renders as:
<input type="image" data-confirmPrompt="OK to delete customer 123?" ... />
I then just need to add a click handler for elements that have this custom attribute. The following example uses jquery-impromptu, but the same principle works with any of the jquery modal dialog implementations:
$(document).ready(function () {
$("[data-confirmPrompt]").click(function (event) {
var confirmPrompt = event.currentTarget.attributes['data-confirmPrompt'].value;
event.preventDefault();
$.prompt(confirmPrompt, {
buttons: { Yes: true, No: false },
callback: function (v, m, f) {
if (v) {
// User clicked Yes. Unbind handler to avoid
// recursion, then click the target element again
$(event.currentTarget).unbind('click');
event.currentTarget.click();
}
}
});
});
});
This all seems to work fine on IE8 with XHTML 1.0 Strict. So my questions are:
Will all modern browsers accept custom attributes like this?
I understand this is not strictly standard compliant. Can anyone suggest an standards-compliant alternative that is at least as unobtrusive and easy to use?
UPDATE added data-
prefix to custom attribute, which I understand at least makes it HTML5 compliant.
UPDATE 2 See this follow-up question for an improved solution.