2012-04-18 14 views
0

我試圖做一塊dojo代碼工作,並有一點點的困難時間。 它背後的意圖是這樣的:嘗試創建/綁定onClick事件到<option>通過dojo.xhrGet請求生成

1-有一個選擇火災的onChange事件,通過dojo.xhrGet檢索選項列表。 2-讓每個檢索到的選項都獲得與其關聯/綁定的onclick事件,並且它觸發的功能需要2個參數

問題:此時,選項上的onClick事件一觸發通過Ajax檢索並且不通過firt參數。此後事件停止發射(點擊不產生任何東西)。

感謝您提前提供反饋。代碼如下

JS

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.innerHTML; 

       checkPack(j,i); 
       console.log('write me if you fire inside first function'); 
      }; 
      dojo.query("#coreografia_1>option").connect('click', 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; 

    dojo.xhrGet({ 
     url:"ajaxPack.php", 
     handleAs:"text", 
     content: { 
      programa: prog, 
      coreo: j 
     }, 
     load: function(data){ 

      if(data=="true"){ 
       dojo.query("option[value="+num+"]").forEach(dojo.destroy); 
       alert('O Pack escolhido já foi encomendado previamente.'); 
       setValor(i); 
      } 

     } 

    }); 

} 

HTML

<select name="programa[]" id="programa_1" onChange="checkAvailable(1)" title="obrigatorio"> 
       <option value="0">Choose your program</option> 

</select> 
<select name="coreografia_1" id="coreografia_1" disabled="disabled" title="obrigatorio"> 
       <option value="0" selected="selected">Escolha Um Programa</option> //this is the node that is populated by the first xhrGet call 
      </select> 

編輯:我編輯的代碼,以反映更改,並添加HTML

回答

0

從我的經驗,如果你花費超過1天試圖跟蹤一個跨布勞爾問題,它可能是某個地方你的基本的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.'); 

      } 

     } 

    }); 
} 
0

通過檢查你的代碼,我可以看到,在功能checkAvailable,在您連接到onclick事件而不是傳遞回調你是呼叫它。

dojo.connect(opt,'onclick', checkPack(opt.target.innerHTML,i)); 

你應該做這樣的事情:

var callback = function(){ 
    checkPack(opt.target.innerHTML,i); 
}; 
dojo.connect(opt,'onclick', callback); 
+0

這工作來解決這個問題的一部分。現在的問題是Chrome。它適用於FF,但Chrome從不觸發註冊的checkPack功能。控制檯上也沒有。謝謝您的回答! – RedRazor 2012-04-19 08:49:03

+0

腳本適用於FF和IE9。不適用於Chrome,Safari和IE 9以下。通過工作,我的意思是,它會觸發第一個xhrGet函數,檢索並填充所需的內容,我相信(通過檢查DOM)它確實註冊了與每個

+0

你能否粘貼html ?. – Jmsegrev 2012-04-19 11:50:45