我有一个HTML网格,其行数可变,在第一列和第一列中都有一个日期选择器。第3列中的HTML按钮。
我需要获得按钮和放大器的参考。在函数中传递它(可能多一次)来调用它的点击或在不同的地方访问它的属性。
doSomething.call(this, { 'btnRef': myButton[0] }, condition);
进一步我将一个对象中的这个变量传递给另一个JS函数doSomething
unsavedObj['btnRef'] = arguments[0]['btnRef']; // I also tried jQuery(arguments[0]['btnRef'])
在doSmething函数中,我将此引用保存在全局JS对象
中unsavedObj['btnRef'].attr('rel')
unsavedObj['btnRef'] // shows as undefined in console.
尝试通过全局对象访问属性后出现问题
jQuery(arguments[0]['btnRef'].attr('rel'))
我可以在var myButton获取值的函数内正确访问属性等//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();
}
}]
});
}
}
也返回正确的结果。
这是由于背景导致的问题吗?。
示例代码:
A = LOAD 'bank.txt';
B = GROUP A by $0;
C = FOREACH B GENERATE group as Bank,COUNT(B.Branches_Field) cnt;
D = ORDER C BY cnt DESC;
E = LIMIT D 1;
DUMP E;
我很抱歉格式不佳。
感谢。
答案 0 :(得分:2)
更改
var myButton = $(this).parents('tr').find('input[type=button]');
到
var myButton = $(this).closest('tr').find('input[type=button]');
然后改变
doSomething.call(this, { 'btnRef': myButton[0] }, condition);
到
doSomething.call(this, { 'btnRef': myButton }, condition);
现在您正在创建一个jQuery对象数组而不是一个html对象数组,因此.attr(...)函数应该可以正常工作。
编辑: 我怀疑这里有多个问题在起作用。既然你说上面没有用,那就让我们来看看doSomething.call(...)。在这里查看文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call。注意,这里没有jQueryable $(this),而是对你在调用语句中传递的参数的引用。
问题1:在其他任何地方都会调用doSomething吗?如果没有,那么让我们更明确地构建签名,并使用更传统的函数调用来调用它:
function doSomething(varA, varB, ...){ }
和
doSomething(....actual passed variables...)
让我们从那里开始,看看我们是如何做的。
答案 1 :(得分:0)
对不起,由于访问外部功能的arguments
对象的闭包限制而发生此问题。这里Bootstrap.show({..'s
按钮定义实际上是一个闭包。
通过创建arguments
。
谢谢大家。