在javascript中将'this'从一个函数传递给另一个函数?

时间:2012-02-09 21:32:33

标签: jquery

function removeNewsItem(id,idStamp,obj){
 $('#whiteCover')show();

 $('#contentOfBox').html= ('Are you sure you want ot completely remove this news item?<br/><br/><div style="text-align:center;"><input type="button" class="button blue medium" onclick="removeNewsItemConfirmed(\'' + id + '\',\''+idStamp+'\','+**obj**+')" value="Yes"/> <input type="button" class="button red medium" value="No" onclick="resetContentBox();"/></div>');

 $("#whiteCoverContainer").fadeIn();
}

function removeNewsItemConfirmed(id,idStamp,obj){
   alert(obj);
   $(obj).remove();
   return;
}

<tr><td onclick=removeNewsItem('111','134234',this)></td></tr>

当我点击带有removeNewsItem的td时,我似乎无法通过&#39;这个&#39;元素到下一个功能:用户点击后,会显示一条要求确认删除的消息,但是当他们点击它时,这个&#39;这个&#39;没有得到正确的通过,或者更多的是我无法确定如何......

有人可以帮忙:我如何将obj传递给上面的另一个内联onclick事件?

3 个答案:

答案 0 :(得分:1)

好像你应该使用活动。如果您使用jQuery,请使用on()来附加事件而不是属性。 More about on()

使用此功能代替onclick会将this返回到您的功能。举个例子:

<table>
<tr><td>123</td></tr>
<tr><td>456</td></tr>
</table>

还有一些JS

// Will have access to this and has ev which is the event
function removeNewsItem(ev){
   var $this = $(this);
}

$('table').on('click', 'td', removeNewsItem);

如果您需要将数据值附加到表格单元格,则可以使用数据属性和jQuery's data()执行此操作。

答案 1 :(得分:1)

您的活动可能如下所示(不会更改现有标记的太多):

$(".newsItem").click(function(){
    var id = $(this).attr('id');
    var idStamp = $(this).attr('idStamp');
    $('#whiteCover')show();  

    $('#contentOfBox').html= ('Are you sure you want ot completely remove this news item?<br/><br/><div style="text-align:center;"><input type="button" class="button blue medium" onclick="removeNewsItemConfirmed(\'' + id + '\',\''+idStamp+'\')" value="Yes"/> <input type="button" class="button red medium" value="No" onclick="resetContentBox();"/></div>'); 

    $("#whiteCoverContainer").fadeIn();  
});

function removeNewsItemConfirmed(id,idStamp){              
   alert(id);              
   $("#"+id).remove();              
   return;              
}     

您的HTML将如下所示:

<tr><td id='111' idStamp='134234' class='newsItem'></td></tr>

答案 2 :(得分:0)

this是对被点击元素的引用。如果您使用自己的onclick处理程序添加新元素,那么this将引用该元素。不是那个创造它的人。

所以这将永远不会像你想象的那样工作

onclick="removeNewsItemConfirmed(\'' + id + '\',\''+idStamp+'\','+**obj**+')"

相反,您需要创建一个可以跟踪的引用。

function removeNewsItem(id,idStamp,obj){
   $(obj).addClass('markedForDeletion');
   $('#whiteCover')show();
   $('#contentOfBox').html= ('Are you sure you want ot completely remove this news item?<br/><br/><div style="text-align:center;"><input type="button" class="button blue medium" onclick="removeNewsItemConfirmed()" value="Yes"/> <input type="button" class="button red medium" value="No" onclick="resetContentBox();"/></div>');

   $("#whiteCoverContainer").fadeIn();
}

function removeNewsItemConfirmed(){
   $('.markedForDeletion').remove();
}

总的来说,有更好的方法可以解决所有这些问题,但希望这会让你前进。