Ошибка JQuery в IE, работает с FF.Может быть проблема с живым - PullRequest
4 голосов
/ 07 мая 2010

У меня есть приложение ASP.net MVC2. В котором я использую JQuery для изменения всех строк таблицы, чтобы я мог щелкнуть в любом месте любой строки, чтобы вызвать событие щелчка по ссылке в строке, по которой щелкнули.

Таблицы создаются с использованием встроенного в MVC Ajax частичного просмотра.

Вот мой скрипт JQuery.

<script type="text/javascript">

        $(document).ready(function () {
            $('table tr').live('click',function (event) {
                $('#asplink', this).trigger('click');
            })
            .live('mouseenter',function (event) {
                this.bgColor = 'lightblue';                    
            })
            .live('mouseleave', function (event) {
                this.bgColor = 'white';
            });

        });

</script>

И это первая часть кода частичного представления, который создает таблицу.

<% foreach (var item in Model.JobHeaderData)
   { %>

    <tr>
        <td>
            <a id="asplink" href="http://localhost/sagstyring/EditJob.asp?JobDataID=<%: item.JobDataId %>&JobNumId=<%: item.JobNumID%>&JobNum=<%: item.JobNumID%>&DepId=1&User_Id=<%:ViewData["UserId"]%>" onclick="window.open(this.href,'Rediger sag <%: item.JobNumID %> ', 'status=0, toolbar=0, location=0, menubar=0, directories=0, resizeable=0, scrollbars=0, width=900, height=700'); return false;">Rediger</a>                 
        </td>

В Firefox это работает отлично. В IE сбой JQuery, когда я нажимаю на строку.

Если я отлаживаю страницу в IE. Я понял это.

Out of stack space

В строке jquery-1.4.1.js 1822

 // Trigger the event, it is assumed that "handle" is a function
    var handle = jQuery.data( elem, "handle" );
    if ( handle ) {
        handle.apply( elem, data );
    }

Я не орел в javascript, поэтому я почти застрял.

Редактировать: IE имел проблему с пробелами в моей функции window.open при событии click. Исправив это, я теперь вижу, что событие click действительно работает, но оно входит в цикл. Я просто продолжаю нажимать на ссылку, пока не получу ошибку Out of stack space.

Есть мысли по этому поводу?

Ответы [ 4 ]

1 голос
/ 17 мая 2010

Нашли решение.

Это работает.

$('table tr').live('click', function (event) {                    
                window.open(jQuery(this).find(".asplink").attr('href'), 'Edit', 'status=0, toolbar=0, location=0, menubar=0, width=900, height=700');                               
            })
1 голос
/ 12 мая 2010

Попробуйте это:

$('table tr').live('click',function (event) {
    $('#asplink', this).trigger('click');
    return false;
})

Исходя из этого вопроса , похоже, что event.stopPropogation(); не будет работать с live, и вам нужно будет использовать return false;. Я не уверен, почему это будет проблемой в IE, но не в Firefox.

0 голосов
/ 11 мая 2010

Если у вас все еще есть класс asplink в ваших тегах привязки, попробуйте добавить этот код в документ по готовности:

$('a.asplink').live('click', function(event) {
    event.stopPropogation();
}

Это должно предотвратить возникновение события click на теге привязки до тега tdи снова вызвать событие click для тега привязки.

0 голосов
/ 07 мая 2010

попытайтесь:

$('table tr').live('click',function (event) {
  $(this).find('#asplink').trigger('click');

})

поцарапайте это.

снова глядя на ваш код, я действительно думаю, что это факт, что все строки имеют одинаковый идентификатор.попробуйте дать им всем класс aslpink вместо идентификатора.и измените jquery на:

$('table tr').live('click',function (event) {
  $(this).find('.asplink').trigger('click');

})

хмммм, хорошо: попробуйте дать всем строкам уникальный идентификатор.что-то вроде id='#asplink<%=JobId%>' и использовать

$(this).find('.asplink').click();

есть ли другие таблицы на странице?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...