e.nodeName не определено Jquery - PullRequest
1 голос
/ 10 января 2012

Я ломал голову над мозгом и изучал примеры, не понимая, почему firebug выдает ошибку «e.nodeName is undefined» ..

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

Я просто делаю простой небольшой пост на ajax для некоторых входов, но это мой первый пост в истории, и я близок к тому, чтобы стряхнуть с себя голову из-за того, сколько ошибок я натолкнулся до сих пор ...
http://jsfiddle.net/JohnnyDoe/aQYra/

My скрипт

<script type="text/javascript">
    $(document).ready(function () {
        $('.hexen').after('<div class="ui-state-default ui-corner-all ui-icon-disk ui-icon saveButton" onClick="save();" title="Save" style="float:left; height:20px;" onclick="save()"></div><br />') // ui icon
    .keypress(function () {
        $(this).next('.saveButton').show(); //appends ui icon
    });

        $('.saveButton').hide().click(function () {
            $(this).hide(); // removes ui icon on click
        });

        $('.ui-state-default').hover(

    function () {
        $(this).addClass('ui-state-hover');
    }, function () {
        $(this).removeClass('ui-state-hover');
    } //ui icon hover
    );
    });

    function save(value) {
        $('.hexen').each(function () {
            var id = null;
        });
        if ($(this).val() !== '') {
            id = $(this).attr('id');
        }
    }
    $.ajax({
        type: "POST",
        url: "Default.aspx",
        data: "{Id: " + $(".hexen").attr('id') + ", Value: " + $(".hexen").val() + "}",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            console.log(data);
        }
    });
</script> 




Мой HTML

<div id="unvolitive">
<input type="text" class="hexen" id="Text1"/>
<input type="text" class="hexen" id="Text2"/>
<input type="text" class="hexen" id="Text3"/>
<input type="text" class="hexen" id="Text4"/>
<input type="text" class="hexen" id="Text5"/>
</div> 







Заранее спасибо

Ответы [ 4 ]

9 голосов
/ 10 января 2012

Я думаю, из краткого теста скрипки, что проблема заключается в смешении обычных обработчиков событий jQuery и обработчика onclick, который вы определяете в строке тега (ваша функция save).

Я не уверен, что вы пытаетесь сделать в save; each вызов ничего не делает:

$('.hexen').each(function () {
    var id = null; // all this does is set a local variable
});

но, что более важно, то, как вы настроили это с помощью onclick, this, будет неопределенным, поэтому следующая строка не будет работать:

if ($(this).val() !== '') {

В этом контексте this относится к объекту window, поэтому я думаю, что именно поэтому вы получаете ошибку. Чтобы исправить это, вы должны обработать функцию сохранения в обработчике кликов, назначенном jQuery:

$('.saveButton').hide()
    .click(function () {
        $(this).hide(); // removes ui icon on click
        var id;
        // get the associated input
        var $input = $(this).prev('.hexen');
        if ($input.val() !== '') {
            id = $input.attr('id');
        }
        console.log(id);
        // presumably, do something with id now...
});

См. рабочую скрипку .

7 голосов
/ 10 января 2012

Ошибка возникает в save(), который использует this вне контекста .. ( это относится к окну в настоящее время )

Вероятно, оно должно быть

function save(value) {
    $('.hexen').each(function() {
        var id = null;
        if ($(this).val() !== '') {
            id = $(this).attr('id');
        }
    });
}

I перемещено if часть внутри обработчика each ..

1 голос
/ 10 января 2012

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

"{Id: " + $(".hexen").attr('id') + ", Value: " + $(".hexen").val() + "}"

должно быть

"{'Id': '" + $(".hexen").attr('id') + "', 'Value': '" + $(".hexen").val() + "'}"
1 голос
/ 10 января 2012

Вы определили в вызове ajax dataType: json, поэтому ваш вызов ajax ожидает верного возвращения json с вашего сервера.Похоже, вы не вернете действительный JSON.Я рекомендую удалить эту строку (contentType).Если это не так, то я не знаю, что есть.:)

Кстати, вы можете определить данные следующим образом:

data: {
  Id: $(".hexen").attr('id'),
  Value: $(".hexen").val()
}

Нет необходимости разбирать их самостоятельно.

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