Диалог jquery: выполнение .hide () в главной форме не работает - PullRequest
0 голосов
/ 19 декабря 2011

Это мой код для диалога:

                "Save": function () {
                    $.validator.unobtrusive.parse("#EventManage");

                    if ($("#EventManage").valid()) {

                        $.ajax({
                            url: "/Home/EventSave",
                            type: 'POST',
                            data: $("#EventManage").serialize(),
                            success: function (result) {
                                //alert("s");
                                $("#EventManage").html(result);
                                $.validator.unobtrusive.parse("#EventManage");
                                LoadEventList();
                                alert('x');
                                $('td.hide').hide(); <<<<<
                                alert('x');
                                $('#eventlistww').each(function () {
                                    var $table = $(this);
                                    $('tr', $table).each(function () {
                                        var $row = $(this);
                                        $('td', $row).each(function () {
                                            $('td.hide').hide();
                                        });
                                    });
                                });

                            }
                        });
                    }
                },

Я пытаюсь получить $ ('td.hide'). Hide (); <<<<< для работы на главной странице. Не уверен, почему он не работает, но, кажется, он работает, когда я устанавливаю второе предупреждение ('x'); после чего выполняется. Без этого предупреждения оно не работает. </p>

Что пошло не так?

EDIT

@ ChrisFrancis странно, нет, я закомментирую 2-ю часть и снова использую магию оповещения. оно работает. без предупреждений не работает.

EDIT2

Хотите добавить, LoadEventList () выглядит так:

function LoadEventList() {
         $("#eventlistww").load("/Home/EventDataList");
    }

ПОЛУЧИЛ МОЙ ОТВЕТ:

Мне показалось, что он заработал, изменив LoadEventList ().

function LoadEventList() {
        $.get('/Home/EventDataList', function (result) {
            $('#eventlistww').html(result);
            $('td.hide').hide();
        });
    }

странно, почему это работает, а метод .load - нет.

Ответы [ 3 ]

1 голос
/ 19 декабря 2011

Как уже упоминалось в моем комментарии, это может быть состояние гонки.Событие готовности документа разработано, чтобы обойти эти проблемы, и jQuery делает это очень простым .Просто оберните весь ваш пример кода внутри:

$(document).ready(function() {
    /* your code here... */
});

Или используйте один из других синтаксических вариантов, как указано в документации - я предпочитаю:

$(function() {
    /* your code here... */
});
1 голос
/ 19 декабря 2011

Ваш код выглядит немного сложнее.

Знаете ли вы, что вы можете использовать вложенные css-селекторы вместо итерации каждого уровня (что, похоже, ничего не делает, так как вы все равно вызываете все td.hide в цикле?)

Изменение:

 $('#eventlistww').each(function () {
                                    var $table = $(this);
                                    $('tr', $table).each(function () {
                                        var $row = $(this);
                                        $('td', $row).each(function () {
                                            $('td.hide').hide();
                                        });
                                    });
                                });

К

 $('#eventlistww tr td.hide').hide();

И убедитесь, что на самом деле есть соответствующий элемент. Самый простой способ - использовать Firebug или что-то подобное.

0 голосов
/ 19 декабря 2011

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

Здесь разбитый пример http://jsfiddle.net/DVxSy/72/ нет тегов таблицыРаботаю здесь http://jsfiddle.net/DVxSy/71/

...