Javascript 传递引用jQuery后无法访问元素属性
我有一个HTML网格,它的行数可变,第一列有一个日期选择器,第三列有一个HTML按钮 我需要获取按钮的引用并在函数中传递它(可能不止一次),以调用它的click或在不同的位置访问它的属性Javascript 传递引用jQuery后无法访问元素属性,javascript,jquery,Javascript,Jquery,我有一个HTML网格,它的行数可变,第一列有一个日期选择器,第三列有一个HTML按钮 我需要获取按钮的引用并在函数中传递它(可能不止一次),以调用它的click或在不同的位置访问它的属性 var myButton = $(this).parents('tr').find('input[type=button]'); // accesing the button in a function 此外,我将这个变量在一个对象中传递给另一个JS函数doSomething doSomething.call
var myButton = $(this).parents('tr').find('input[type=button]'); // accesing the button in a function
此外,我将这个变量在一个对象中传递给另一个JS函数doSomething
doSomething.call(this, { 'btnRef': myButton[0] }, condition);
在doSmething函数中,我将这个引用保存在一个全局JS对象中
unsavedObj['btnRef'] = arguments[0]['btnRef']; // I also tried jQuery(arguments[0]['btnRef'])
尝试通过全局对象访问属性后出现问题
unsavedObj['btnRef'].attr('rel')
unsavedObj['btnRef'] // shows as undefined in console.
我可以在var myButton获取值的函数中正确访问属性等jQuery(参数[0]['btnRef'])。attr('rel'))
也会返回正确的结果。
这是由于上下文造成的问题吗
示例代码:
//this is the datepicker handler which fires on select of a date.
onSelect: function(d,i) {
var condition = false;
var myButton = $(this).closest('tr').find('input[type=button]');
var btnRel = myButton.attr('rel');
//some other vars
myButton.prop("disabled", false); //this works fine
if(jQuery(myButton).hasClass('xyz')){
if(changedFor !=''){
if(changedFor == btnRel){
condition = (changedFor == btnRel);
}
}
doSomething.call(this,{'btnRef':myButton},condition);//passing to the function doSomething
}
}
//doSomething function.
function doSomething(){
var thisObj = jQuery(this)
if(arguments[1]){
unsavedObj['btnRef'].triggerHandler('click',{'check':arguments[1]});
}else{
BootstrapDialog.show({ //this is a bootstrap dialogbox
title:'',
message:function(dialog){
var $content = "Are you sure?";
return '<div>' + $content + '</div>';
},
closable: false,
buttons: [{
label:'Change',
cssClass: 'btn',
action: function(dialogItself){
unsavedObj['btnRef'] = arguments[0]['btnRef'];
unsavedObj['context'] = thisObj;
changedFor = unsavedObj['btnRef'].attr('rel'); //does not work
unsavedObj['btnRef'].click(); //does not work
dialogItself.close();
}
},{
label:'Cancel',
cssClass:'btn',
action: function(dialogItself){
dialogItself.close();
}
}]
});
}
}
//这是datepicker处理程序,它在选择日期时启动。
onSelect:函数(d,i){
var条件=假;
var myButton=$(this.nexist('tr').find('input[type=button]);
var btnRel=myButton.attr('rel');
//其他一些Var
myButton.prop(“disabled”,false);//这很好用
if(jQuery(myButton).hasClass('xyz')){
如果(更改为!=“”){
如果(changedFor==btnRel){
条件=(changedFor==btnRel);
}
}
调用(this,{'btnRef':myButton},condition);//传递给函数doSomething
}
}
//剂量测定功能。
函数doSomething(){
var thisObj=jQuery(this)
if(参数[1]){
unsavedObj['btnRef'].triggerHandler('click',{'check':参数[1]});
}否则{
show({//)这是一个引导对话框
标题:“”,
消息:函数(对话框){
var$content=“你确定吗?”;
返回“+$content+”;
},
可关闭:错误,
按钮:[{
标签:'更改',
cssClass:'btn',
操作:函数(对话框本身){
unsavedObj['btnRef']=参数[0]['btnRef'];
unsavedObj['context']=thisObj;
changedFor=unsavedObj['btnRef'].attr('rel');//不起作用
unsavedObj['btnRef']。单击();//不起作用
dialogself.close();
}
},{
标签:'取消',
cssClass:“btn”,
操作:函数(对话框本身){
dialogself.close();
}
}]
});
}
}
很抱歉格式不好
谢谢。换衣服
var myButton = $(this).parents('tr').find('input[type=button]');
到
然后改变
doSomething.call(this, { 'btnRef': myButton[0] }, condition);
到
现在您正在创建jQuery对象数组而不是html对象数组,因此.attr(…)函数应该可以工作
编辑:
我怀疑这里有很多问题。既然你说上面的方法不起作用,那么让我们看看doSomething.call(…)。在这里查看文档。注意,this不是jQueryable$(this),而是对调用语句中传递的参数的引用
问题1:doSomething是否在其他地方被称为?如果没有,那么让我们更明确地构建签名,并使用更常规的函数调用调用它:
function doSomething(varA, varB, ...){ }
及
让我们从这里开始,看看我们是怎么做的。改变
var myButton = $(this).parents('tr').find('input[type=button]');
到
然后改变
doSomething.call(this, { 'btnRef': myButton[0] }, condition);
到
现在您正在创建jQuery对象数组而不是html对象数组,因此.attr(…)函数应该可以工作
编辑:
我怀疑这里有很多问题。既然你说上面的方法不起作用,那么让我们看看doSomething.call(…)。在这里查看文档。注意,this不是jQueryable$(this),而是对调用语句中传递的参数的引用
问题1:doSomething是否在其他地方被称为?如果没有,那么让我们更明确地构建签名,并使用更常规的函数调用调用它:
function doSomething(varA, varB, ...){ }
及
让我们从这里开始,看看我们是怎么做的。很抱歉,由于闭包访问外部函数的
参数对象的限制,出现了这个问题&这里Bootstrap.show({..)的
按钮定义实际上是一个闭包。
通过创建参数的副本
解决了此问题
谢谢大家。很抱歉,由于对访问外部函数的参数对象的闭包的限制,出现了此问题&这里Bootstrap.show({..)的
按钮定义实际上是一个闭包。
通过创建参数的副本
解决了此问题
谢谢大家。为什么要混合使用纯javascript和jQuery?一旦开始使用jQuery,就可以用它来摆脱麻烦。能否提供完整的示例代码?这是否解决了问题: