2014-10-17 119 views
3

下面的代碼工作正常,在Chrome和Firefox,但並不在IE瀏覽器正常工作:SCRIPT16385:未實現

if (jQuery.trim(jQuery("#"+element_id.name).val()) != "" && jQuery.trim(jQuery("#"+element_id.name).val()) != "0") { 
    jQuery("#filters-box").append('<span id="filter-'+ element_id.name +'" class="toggler"><button class="button white" onClick="removeFilter(\'filter-' + element_id.name + '\')"> ✖ </button>' + document.getElementById(element_id.name + "_caption").value + ' -> ' + document.getElementById(element_id.name).value + '</span>'); 
} 

雖然它可以附加HTML代碼,並將其呈現在頁面上正確,但其onClick事件會生成上述錯誤消息。

+0

你可以做一個[小提琴](http://jsfiddle.net)我們可以看到這個問題? – Banana 2014-10-17 05:54:18

+1

+ removeFilter究竟做了什麼?你能顯示它的源代碼嗎? – 2014-10-17 05:56:01

+0

/* 移除過濾器 */ 函數removeFilter(filter_id){ var elementid = filter_id.replace(「filter-」,「」); removeFilterBefore(elementid); //刪除過濾器關鍵字和值 刪除過濾器[elementid.replace(「list_」,「」)]; //從過濾器框中刪除過濾器按鈕 jQuery(「#」+ filter_id).remove(); //啓用其各自的下拉列表 jQuery(「#」+ elementid).prop(「disabled」,false); removeFilterAfter(elementid); } – Agilox 2014-10-17 05:59:44

回答

1

如果您使用jQuery預編譯字符串,您可以附加事件,就好像它已經在DOM中一樣(基本上)。這是清潔,不唐突,應該由jQuery的支持所有瀏覽器:

if (jQuery.trim(jQuery("#"+element_id.name).val()) 
    != "" && jQuery.trim(jQuery("#"+element_id.name).val()) != "0") { 

    // precompile to a temp var 
    var $temp = jQuery('<span id="filter-'+ element_id.name +'" class="toggler"><button class="button white"> ✖ </button>' + document.getElementById(element_id.name + "_caption").value + ' -> ' + document.getElementById(element_id.name).value + '</span>'); 

    // this works fine 
    $temp.find('button.button.white').on('click', function() { removeFilter('filter-' + element_id.name); }); 

    jQuery("#filters-box").append($temp); 
} 
+0

您的代碼工作正常! – Agilox 2014-10-17 06:07:32

+0

@Agilox相關知識!正確的答案/ +1將不勝感激:) – 2014-10-17 06:08:19

+0

在相同的版本或不同的版本?使用jQuery具有將瀏覽器抽象出來的優點,因此無論使用哪種瀏覽器(或所述瀏覽器的版本),如果jQuery支持它,它都可能一直工作。 – 2014-10-17 06:14:23

4

奇怪的是我試圖改變你的函數名「removefilter我的」和它的作品精美絕倫 請查收變化

var element_id = { 
 
    name: "test", 
 
    "test_caption": "_caption" 
 
}; 
 

 
function rmvFilter(ele) { 
 

 
    alert(ele); 
 
} 
 

 
var html = '<span id="filter-' + element_id.name + '" class="toggler">'; 
 
html += '<button class="button white" id="button" onClick="rmvFilter(\'caption_' + element_id.name + '\');"> ✖ </button></span>'; 
 
jQuery("#filters-box").append(html);

我沒有找到代碼中的任何錯誤,除了唯一的那個名字的確切組合並不奇怪在IE9工作

0

謝謝你,Kartheek。我在IE9中遇到了一個名爲「removeFilter(event)」的函數(它在Firefox和Chrome中運行正常)並且更改函數名也適用於我。

我只能假設這是IE的一種內置函數,因爲IE9沒有實現,因此瀏覽器會調用錯誤的函數來引發其未執行的錯誤。

+0

請不要添加「謝謝」作爲答案。相反,當你有足夠的聲望時,你可以[upvote有幫助的答案](http://stackoverflow.com/help/privileges/vote-up)或[獎勵有用的答案賞金](http://stackoverflow.com/幫助/獎金)。 – 2015-05-08 21:25:58