Ticket #9410 (closed bug: invalid)
JQuery 1.6.(.1): jquery.event.trigger removed try-catch
| Reported by: | m.heindl@… | Owned by: | m.heindl@… |
|---|---|---|---|
| Priority: | undecided | Milestone: | 1.next |
| Component: | unfiled | Version: | 1.6.1 |
| Keywords: | Cc: | ||
| Blocking: | Blocked by: |
Description
During the massive change in the trigger-function a try-catch block around an if-statement was removed; position at the comment "Trigger an inline bound script".
This causes massive errors from ie6 to ie9 in the combination of triggering a change-event and the clientside eventhandling of asp.net.
We fixed it by simply adding the try-catch again.
try {
if (ontype && jQuery.acceptData(cur) && cur[ontype] && cur[ontype].apply(cur, data) === false) {
event.result = false;
event.preventDefault();
}
// prevent IE from throwing an error for some elements with some event types, see #3533
} catch (e) { }
Up to version 1.5.2 the comment at the catch was "prevent IE from throwing an error for some elements with some event types, see #3533".
Change History
comment:1 follow-up: ↓ 2 Changed 2 years ago by dmethvin
- Owner set to m.heindl@…
- Status changed from new to pending
comment:2 in reply to: ↑ 1 Changed 2 years ago by m.heindl@…
- Status changed from pending to new
It is quite hard to get a real life test, because we use the asp.net-framework. But here is a little mockup: http://jsfiddle.net/FAG6m/5/
The change-function has quite a similar behavior as our .net-validators in the internet explorer, i.e. trying to access an collection, which is null.
comment:3 Changed 2 years ago by dmethvin
- Status changed from new to pending
Okay, then use the IE debugger (F12), turn on script debugging, and find out where the error occurs. The call stack and locals should tell you more about the error.
comment:4 Changed 2 years ago by m.heindl@…
- Status changed from pending to new
This is the by asp.net autogenerated function, that causes the problems:
function ValidatorOnChange(event) {
if (!event) {
event = window.event;
}
Page_InvalidControlToBeFocused = null;
var targetedControl;
if ((typeof(event.srcElement) != "undefined") && (event.srcElement != null)) {
targetedControl = event.srcElement;
}
else {
targetedControl = event.target;
}
var vals;
if (typeof(targetedControl.Validators) != "undefined") {
vals = targetedControl.Validators;
}
else {
if (targetedControl.tagName.toLowerCase() == "label") {
targetedControl = document.getElementById(targetedControl.htmlFor);
vals = targetedControl.Validators;
}
}
var i;
for (i = 0; i < vals.length; i++) {
ValidatorValidate(vals[i], null, event);
}
ValidatorUpdateIsValid();
}
The _selectDate-function of jquery.ui.datepicker triggers the change-event. Between this function and the ValidatorOnChange-function is the usual jquery callstack.
According to the debugger, in IE the targetedControl is filled by event.srcElement. The other Browsers use event.target.
But it has neither validators nor is a label so the variable vals is not filled and is undefined. So vals.length causes the error. It looks as if the function tries to validate the jquery.ui.datepicker itself, because the targetedControl-variable causing the error has no id-attribute and as innerHtml-attribute the number value of the selected day; e.g. picking May, 25th, you geht as innerHtml 25. I think IE validates all html-elements, that have changed, and that causes the problems.
I debugged with IE9 in Browsermodes IE7-9, but all IEs from 6 to 9 have this behavior.
comment:5 Changed 2 years ago by dmethvin
- Status changed from new to closed
- Resolution set to invalid
That seems like a bug in the assumptions of the autogenerated code. The vals variable is not set at all in the case where it fails. Note that code does not seem to be intended to be run under jQuery, it does its own browser feature detects for validation.
In any case, the error does not seem to be anything we should be masking via a try/catch inside jQuery, so I'm going to close this ticket.
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

Can you provide a test case? The problem with the old code was exactly that the try/catch swallowed errors in a user's inline handlers, so it sounds like the new code is doing just what it should be doing -- allowing users to see errors.