JS对象访问问题

下面是代码

//td点击触发的函数
function tdClick() {
//1.取出当前td里面的文本内容
var td = $(this);
var tdText = td.text();

//0.取出字段名称与ID
var id = td.parent().attr('rel');
var field = td.attr('field');

//2.清空td里面的文本内容
td.html(""); //也可以使用td.empty();
//3.建立一个输入框,也就是input标签
var input = $("<input>");
//4.将输入框的内容设为刚才保存的td里面的文本内容
input.attr("value", tdText);

save_rating_data = function() {

//2.保存当前输入框的内容
var input = $(this);
var inputText = input.val(); //这个地方不能用text(),而是用val()
if (field == 'discount') {
if (isNaN(inputText) || inputText > 10) {
alert(lang.please_enter_the_correct_number_of_discount);
return;
}
}
//3.清空td的内容,即去掉输入框
var td = input.parent("span");
td.empty();
//4.将保存的文本内容填充到td中去
td.html(inputText);
//5.让td重新拥有点击事件
td.click(tdClick);

//6.更新商品数据
update_rating_data(field, inputText, id);
}
//4.5.让文本框能够响应键盘按下的keyup事件,主要是用于处理回车确认
input.keyup(function(event) {
//1.获取当前用户按下的键值
//解决不同浏览器获得事件对象的差异,
// IE用自动提供window.event,而其他浏览器必须显示的提供,即在方法参数中加上event
var myEvent = event || window.event;
var keyCode = myEvent.keyCode;
//2.判断是否是回车按下
if (keyCode == 13) {

//2.保存当前输入框的内容
var input = $(this);
var inputText = input.val(); //这个地方不能用text(),而是用val()
if (field == 'discount') {
if (isNaN(inputText) || inputText > 10) {
alert(lang.please_enter_the_correct_number_of_discount);
return;
}
}
//3.清空td的内容,即去掉输入框
var td = input.parent("span");
td.empty();
//4.将保存的文本内容填充到td中去
td.html(inputText);
//5.让td重新拥有点击事件
td.click(tdClick);

//6.更新商品数据
update_rating_data(field, inputText, id);
}
});
input.blur(save_rating_data);
//5.将输入框加到td中
td.append(input); //也可以用input.appendTo(td);
//5.5 让文本框中的文字被高亮选中
//需要将jquery对象转化为DOM对象
var inputDom = input.get(0);
inputDom.select();
//6.需要移除td上的点击事件
td.unbind("click");
};

这里有个光标离开触发
input.blur(save_rating_data);
if (keyCode == 13) {
这里有个回车触发我也想调用
save_rating_data()
却不支持,应该如何写?

你是用的Jquery吗?在网页上按回车调用的写法如下:
$("document").keyup(function(event){
var keycode = event.which;
if (keyCode == 13) {
save_rating_data();
}

});追问

回车响应没问题:问题在于方法调用。
if (keyCode == 13) {
save_rating_data();
}
save_rating_data方法不能这样调用。请把问题看清再回答。

追答

哦,你的
save_rating_data方法里判断一下,如果this为null,就获取一个指定的对象呗:
save_rating_data = function() {
if(this && this != document)
var input = $(this);
else
var input = $("#xxxx");

追问

1.在不改变函数的情况下,不能调用吗?
2.因为这个input是动态生成,没ID,或是选择器,位置也是变动的,所以不能这样选择。

追答

不改变函数的情况下,不能调用,因为你这个函数里用了this,而keyup事件响应的不一定是这个input,除非你写在input的keyup事件里

至于你说的input是动态的,你完全可以随便加一个属性给它,然后通过这个属性去选择

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-18
save_rating_data 声明的地方不对,写到这里$(function(){ }试试