2011-03-15 62 views
2

我爲客戶端編寫了一個選擇框,用於查找被第三方javascript函數重新編寫爲一串divs和跨度,然後最終一個隱藏的元素,它包含從選擇div/span元素中選擇的值。還有另外一個選擇框,我在這個選擇框的下方編程,這個選擇框取決於第一個選擇框的值(即用戶選擇一個國家,如果國家包含諸如美國和加拿大等地區,則會出現狀態選擇框) 。在任何情況下,我認爲最好只在第一個選擇框中添加一個onChange事件給新創建的隱藏元素,然後編寫我自己的javascript函數,這會在顯示/隱藏第二個選擇框時根據隱藏元素值它因選擇國家而改變(第三方JavaScript已經用新選擇的國家值更新了隱藏的元素值)。我試過在jQuery中做這個,只是直接JavaScript的API,但似乎沒有工作。只是供參考,當第三方的javascript重寫我的選擇框到div/span和隱藏的輸入字段,隱藏的輸入字段沒有id屬性,所以我通過它的名稱引用元素(「collect_data [7] [0] 「)。以下是我試過到目前爲止代碼....HTML/JavaScript/JQuery Document.onChange for Hidden Element Not Working

<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    jQuery("input-country").change(function(e){ 
     console.log("testA"); 
    }); 
}) 
jQuery("input-country").change(function(e){ 
    console.log("testB"); 
}); 
jQuery(document).ready(function(){ 
    jQuery(document.forms['myForm']['collected_data[7][0]']).change(function(e){ 
     console.log("testC"); 
    }); 
}) 
jQuery(document.forms['myForm']['collected_data[7][0]']).change(function(e){ 
    console.log("testD"); 
}); 
document.forms['myForm']['collected_data[7][0]'].onchange = function(){ 
    console.log("testE"); 
}; 
document.getElementById('input-country').onchange = function(){ 
    console.log("testF"); 
} 
jQuery(document.forms['myForm']['collected_data[7][0]']).live('change',function(){ 
    console.log("testG " + jQuery(this).val()) 
}); 
jQuery('input-country').live('change',function(){ 
    console.log("testH " + jQuery(this).val()) 
}); 
jQuery(document).ready(function(){ 
    jQuery(document.forms['myForm']['collected_data[7][0]']).live('change',function(){ 
     console.log("testI " + jQuery(this).val()) 
    }); 
}) 
jQuery(document).ready(function(){ 
    jQuery('input-country').live('change',function(){ 
     console.log("testJ " + jQuery(this).val()) 
    }); 
}) 
</script> 

回答

7

時,隱藏的元素是由某人的JavaScript代碼編程方式改變了你不會得到「變」事件。這些僅在實際用戶操作時由瀏覽器生成。對於第三方JavaScript來說,更好的做法是在隱藏的select上顯式調用「.change()」(jQuery方法)。

隱藏的元素顯然永遠不會成爲用戶交互的目標。

+1

+1,我從來不知道。 (或從未*認識到,這相當於真的):)) – 2011-03-15 20:10:24

0

'input-country'不是有效的選擇器。此外,更改事件需要焦點增益,值更改,焦點丟失(模糊) - 隱藏輸入不會有這樣的事件序列,因此當您更改其值時,您必須手動觸發更改。