Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 传递引用jQuery后无法访问元素属性_Javascript_Jquery - Fatal编程技术网

Javascript 传递引用jQuery后无法访问元素属性

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

我有一个HTML网格,它的行数可变,第一列有一个日期选择器,第三列有一个HTML按钮

我需要获取按钮的引用并在函数中传递它(可能不止一次),以调用它的click或在不同的位置访问它的属性

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,就可以用它来摆脱麻烦。能否提供完整的示例代码?这是否解决了问题: