Javascript 正在尝试将onClick事件创建/绑定到<;选项>;通过dojo.xhrGet请求生成
我正试图让一段dojo代码正常工作,但有点困难。 其背后的意图如下:Javascript 正在尝试将onClick事件创建/绑定到<;选项>;通过dojo.xhrGet请求生成,javascript,events,dojo,Javascript,Events,Dojo,我正试图让一段dojo代码正常工作,但有点困难。 其背后的意图如下: var callback = function(){ checkPack(opt.target.innerHTML,i); }; dojo.connect(opt,'onclick', callback); 1-具有select fire an onChange事件,该事件通过dojo.xhrGet检索选项列表。 2-使检索到的每个选项都与自己的onclick事件关联/绑定,并且它所激发的函数具有2个参数 问题:此时
var callback = function(){
checkPack(opt.target.innerHTML,i);
};
dojo.connect(opt,'onclick', callback);
1-具有select fire an onChange事件,该事件通过dojo.xhrGet检索选项列表。
2-使检索到的每个选项都与自己的onclick事件关联/绑定,并且它所激发的函数具有2个参数
问题:此时,选项上的onClick事件会在通过Ajax检索时立即触发,并且不会传递第一个参数。事件在此之后停止触发(单击不会产生任何结果)
提前感谢您的反馈。代码如下
JS
HTML
选择你的节目
Escolha Um Programa//这是由第一个xhrGet调用填充的节点
编辑:我编辑了代码以反映对它的更改,并通过检查代码添加了html,我可以在函数checkAvailable中看到,在连接到onclick事件的行中,而不是将函数作为回调传递给调用它的函数 你应该这样做:
var callback = function(){
checkPack(opt.target.innerHTML,i);
};
dojo.connect(opt,'onclick', callback);
根据我的经验,如果你花了一天多的时间来跟踪一个跨浏览器的问题,那么它可能在你的基本html知识或基本Js概念的某个地方 这与只有FF管理直接连接到选项标记的onclick事件有关。对于团队的其他成员,您需要将onchange附加到父级 因此,这里是工作代码的最终版本,以防有人遇到类似的问题
function checkAvailable(i){
var id_prog = 'programa_'+i;
var id_coreo = 'coreografia_'+i;
var prog = dojo.byId(id_prog).value;
dojo.xhrGet({
url:"ajaxCoreo.php",
handleAs:"text",
content: {
programa: prog,
item: i
},
load: function(data){
var targetNode = dojo.byId(id_coreo);
dojo.place(data,targetNode,"only");
dojo.byId(id_coreo).disabled = false;
var callback = function(evt){
var j = evt.target.value;
checkPack(j,i);
};
dojo.query("#coreografia_"+i).connect('onchange', callback);
setValor(i);
}
});
}
function checkPack(j,i){
console.log('write me if you fire inside second function');
console.log(j);
console.log(i);
var num = j;
var id_prog = 'programa_'+i;
var id_coreo = 'coreografia_'+j;
var prog = dojo.byId(id_prog).value;
//Confirma Se não há encomendas previas deste pack (um máximo de 2 anteriores)
dojo.xhrGet({
url:"ajaxPack.php",
handleAs:"text",
content: {
programa: prog,
coreo: j
},
load: function(data){
if(data=="true"){
dojo.query("#coreografia_"+i+" option[value="+num+"]").forEach(dojo.destroy);
alert('O Pack escolhido já foi encomendado previamente.');
}
}
});
}
这可以解决部分问题。现在的问题是铬。它适用于FF,但Chrome从不启动已注册的checkPack函数。控制台上也没有。谢谢你的回答!脚本在FF和IE9上工作。不适用于低于9的Chrome、Safari和IE。通过工作,我的意思是,它确实启动了第一个xhrGet函数,检索并填充了所需的de内容,我相信(通过检查DOM),它确实注册了与每个内容相关联的单击事件。不工作意味着它永远不会实际启动已注册的函数。我编辑了代码以反映Juanma的输入和html。我有点相信这是一个事件管理的问题,但我已经没有“尝试”…我已经找到了基于此的解决方案
var callback = function(){
checkPack(opt.target.innerHTML,i);
};
dojo.connect(opt,'onclick', callback);
function checkAvailable(i){
var id_prog = 'programa_'+i;
var id_coreo = 'coreografia_'+i;
var prog = dojo.byId(id_prog).value;
dojo.xhrGet({
url:"ajaxCoreo.php",
handleAs:"text",
content: {
programa: prog,
item: i
},
load: function(data){
var targetNode = dojo.byId(id_coreo);
dojo.place(data,targetNode,"only");
dojo.byId(id_coreo).disabled = false;
var callback = function(evt){
var j = evt.target.value;
checkPack(j,i);
};
dojo.query("#coreografia_"+i).connect('onchange', callback);
setValor(i);
}
});
}
function checkPack(j,i){
console.log('write me if you fire inside second function');
console.log(j);
console.log(i);
var num = j;
var id_prog = 'programa_'+i;
var id_coreo = 'coreografia_'+j;
var prog = dojo.byId(id_prog).value;
//Confirma Se não há encomendas previas deste pack (um máximo de 2 anteriores)
dojo.xhrGet({
url:"ajaxPack.php",
handleAs:"text",
content: {
programa: prog,
coreo: j
},
load: function(data){
if(data=="true"){
dojo.query("#coreografia_"+i+" option[value="+num+"]").forEach(dojo.destroy);
alert('O Pack escolhido já foi encomendado previamente.');
}
}
});
}