我动态地创建了几次相同的输入框。当用户按下enter键时,它会调用一个函数。然后我用这段代码测试:
function insertComment(){
alert($(this).attr('id'));
}
但它一直未定义返回。这是我用来创建类似输入框的语法:
$("#divToAppend").append("<input id='testID' type = 'text' class = 'formatCSS' style = 'margin-top:12px ; ' placeholder = 'Add Comment' onkeydown='if (event.keyCode == 13) insertComment()'></input>");
答案 0 :(得分:7)
在调用方法时传递此信息:
$("#divToAppend").append("<input id='testID' type = 'text' class = 'formatCSS' style = 'margin-top:12px ; ' placeholder = 'Add Comment' onkeydown='if (event.keyCode == 13) insertComment(this)'></input>");
function insertComment(this)
{
alert($(this).attr('id'));
}
答案 1 :(得分:1)
谨防this
。这是一个疯狂的变量,你总是想在你的代码中添加它之前要三思而后行。
在我们调试之前,第一课是 -
window
对象。现在让我们分析一下这里发生了什么。
当用户按下输入字段上的某个键时,会调用insertComment
。由于没有上下文,因此在窗口上下文中调用它。现在,在函数内部,this
实际上指向window
,并且没有定义window.attr('id')
。
相当于调用window.insertComment
this == window
。
如果您修改代码 -
onkeydown='if (event.keyCode == 13) insertComment(this)'
function insertComment(x){
alert(x.attributes.id);
}
此处,上下文仍为window
,即this
变量仍指向window
对象,但input
元素本身将作为参数传递给insertComment
函数。
x
将引用该元素,您现在可以用老式的javascript方式提取id
属性 - x.attributes.id
(或以jQuery方式,如果您愿意 - $(x).attr('id')
)
答案 2 :(得分:1)
检查一下:
<强> HTML:强>
<div id="divToAppend">
<input class="formatCSS" type="text" id="id_1">
</div>
js&amp; jquery的强>
// For alert the ID
function insertComment(id){
alert(id);
}
$(document).ready(function(){
// Look for any event 'keydown' in any element which has a class 'formatCSS'
$(document).on('keydown','.formatCSS',function(e){
// If enter is pressed
if (e.keyCode == 13){
//Get the current ID
var text_id=$(this).attr('id');
//Split it to get the counter. The ID must be unique
var id=text_id.split('_');
//Add 1 to the counter
var counter=parseInt(id[1])+1;
// Build the new ID
var new_text_id="id_"+counter;
// Then, create the new input with the iD
$("#divToAppend").append("<input id='"+new_text_id+"' type = 'text' class = 'formatCSS' />");
// Last, alert the ID
insertComment(new_text_id);
}
});
});
也许它可以提供帮助。 :)
看到它正常工作:http://jsfiddle.net/pN8P6/
答案 3 :(得分:0)
您需要将值存储在ID中吗? (似乎你的部分问题可能是你有多个相同的ID,这是非法的。)
怎么样:
$("#divToAppend")
.append("<input type = 'text' class = 'formatCSS' style = 'margin-top:12px ; ' placeholder = 'Add Comment'></input>")
.keydown(function() { insertComment('whatever') });