1

我动态地创建了几次相同的输入框。当用户按下回车键时,它会调用一个函数。然后我用这段代码测试:

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>");
4

4 回答 4

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')); 
}
于 2013-10-10T16:03:42.493 回答
1

检查这个:

HTML:

<div id="divToAppend">
  <input class="formatCSS" type="text" id="id_1">  

</div>

js & 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/

于 2013-10-10T16:20:49.040 回答
1

当心this。这是一个疯狂的变量,你总是想在将它添加到代码之前三思而后行。

在我们调试之前,第一课是——

  • 每个函数总是在上下文中调用,如果你不能告诉上下文,它就是window对象。

现在让我们分解这里发生的事情。

当用户在您的输入字段上按下一个键时,insertComment调用。由于没有上下文,因此在窗口上下文中调用它。所以现在,在函数内部,你this实际上指向的是window,并且没有window.attr('id')定义。

相当于调用window.insertCommentwhere this == window

如果您像这样修改代码 -

onkeydown='if (event.keyCode == 13) insertComment(this)'

function insertComment(x){
    alert(x.attributes.id);
}

在这里,上下文仍然是window,即this变量仍然指向window对象,但input元素本身将作为参数传递给insertComment函数。

x将引用元素,您现在可以id以老式的 javascript 方式提取属性 -x.attributes.id

(或者以 jQuery 方式,如果你喜欢 - $(x).attr('id')

于 2013-10-10T16:13:32.307 回答
0

您需要将值存储在 ID 中吗?(似乎您的部分问题可能是您有多个相同的 ID,这是非法的。)

怎么样:

$("#divToAppend")
  .append("<input type = 'text' class = 'formatCSS' style = 'margin-top:12px ; ' placeholder = 'Add Comment'></input>")
  .keydown(function() { insertComment('whatever') });
于 2013-10-10T16:20:35.003 回答