我绞尽脑汁经历它,查看示例并且不明白为什么firebug投掷“e.nodeName未定义”错误。
这可能是一个愚蠢的小支架不合适或需要第二双眼睛看到的东西...
我只是为一些输入做了一个简单的小ajax帖子,但这是我的第一篇文章,由于到目前为止遇到了多少错误,我差点把头发拉下来。 br /> http://jsfiddle.net/JohnnyDoe/aQYra/
我的剧本
<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>
提前致谢
答案 0 :(得分:9)
我认为,从简短的小提琴测试中,问题来自于混合普通的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分配的单击处理程序中处理save函数:
$('.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...
});
答案 1 :(得分:7)
save()
中的错误发生在上下文之外使用this
..(它指的是当前的窗口)
应该是
function save(value) {
$('.hexen').each(function() {
var id = null;
if ($(this).val() !== '') {
id = $(this).attr('id');
}
});
}
我移动 if
处理程序中的each
部分..
答案 2 :(得分:1)
您在ajax调用dataType: json
中定义,因此您的ajax调用期望从您的服务器返回有效的json。看来你没有返回有效的json。我建议删除此行(contentType
)。如果不是这样,那么我不知道是什么。 :)
顺便说一句,您可以像这样定义数据:
data: {
Id: $(".hexen").attr('id'),
Value: $(".hexen").val()
}
无需自行进行字符串化。
答案 3 :(得分:1)
如果没有工作链接就很难分辨它在哪里陷入困境,但我可以告诉你,你发布的JSON是无效的。
"{Id: " + $(".hexen").attr('id') + ", Value: " + $(".hexen").val() + "}"
应该是
"{'Id': '" + $(".hexen").attr('id') + "', 'Value': '" + $(".hexen").val() + "'}"