function init_exam_chooser(id,mode)
{
this.id=id;
this.table=$("#" + this.id);
this.htmlRowOrder="<tr>" + $("#" + this.id + " tbody tr:eq(0)").html() + "</tr>";
this.htmlRowNew="<tr>" + $("#" + this.id + " tbody tr:eq(1)").html() + "</tr>";
$("#" + this.id + " tbody tr").remove();
//Arxikopoiisi
var rowNew=$(this.htmlRowNew);
rowNew.find("input[type='text']").eq(0).autocomplete({
source: function (req,resp)
{
$.ajax({
url: "/medilab/prototypes/exams/searchQuick",
cache: false,
dataType: "json",
data:{codeName:req.term},
success: function(data) {
resp(data);
}
});
},
focus: function(event,ui)
{
return false;
},
minLength :2
});
rowNew.find("input[type='text']").eq(1).autocomplete({
source: function (req,resp)
{
$.ajax({
url: "/medilab/prototypes/exams/searchQuick",
cache: false,
dataType: "json",
data:{name:req.term},
success: function(data) {
resp(data);
}
});
},
focus: function(event,ui)
{
return false;
},
minLength :2
});
rowNew.find("input[type='text']").bind( "autocompleteselect", function(event, ui) {
alert(htmlRowOrder);
var row=$(htmlRowOrder);
$(table).find("tbody tr:last").before(row);
alert(ui.item.id);
});
rowNew.appendTo($(this.table).find("tbody"));
//this.htmlRowNew
}
问题在于,我如何访问htmlRowOrder? 我试过this.htmlRowOrder并没有工作.... 任何想法??
rowNew.find("input[type='text']").bind( "autocompleteselect", function(event, ui) {
alert(htmlRowOrder);
var row=$(htmlRowOrder);
$(table).find("tbody tr:last").before(row);
alert(ui.item.id);
});
答案 0 :(得分:4)
您的问题是this
不是您认为它在您的事件处理程序中的内容。大多数jQuery事件处理程序在触发事件的元素的上下文中运行;这意味着在事件处理程序中,this
是触发事件的元素。
您可以通过等待下一版本的JavaScript来解决此问题,该版本将包含Function.prototype.bind,或者通过在事件处理程序外部设置对scope对象的引用并在其中引用它,类似于帕特里克的回答。
function(){
var instance = this;
this.foo = "abc123";
$('someselector').click(function(ev){
this.foo; //causes an error; foo is now the element matching 'someselector'
instance.foo; //this returns "abc123"
}
}
答案 1 :(得分:2)
以下是this
关键字的合理详尽说明:
答案 2 :(得分:1)
您可以在函数外定义变量。
var rowNew;
function init_exam_chooser(id,mode) {
...
rowNew=$(this.htmlRowNew);
...
}
rowNew...
当然,您必须在rowNew
引用您想要使用的值之前调用该函数。
我使用了另一个变量,但原理是一样的。
或者,你可以让你的函数返回你想要的值。
function init_exam_chooser(id,mode) {
// Do stuff
return myVariable;
}
var anotherVariable = init_exam_chooser(id,mode);