1. 程式人生 > >通過js添加的DOM節點的click事件綁定不上的解決方案以及IOS下click事件委派失效的解決方案

通過js添加的DOM節點的click事件綁定不上的解決方案以及IOS下click事件委派失效的解決方案

之前 obj cli 並且 create 使用 引入 gpo 聲明

問題描述:

如以下代碼所示,通過js添加的Dom節點,在其上綁定點擊事件,有的時候會出現點擊事件不響應的情況,按照正常的理解,js代碼具有阻塞性,Dom節點添加成功之後,就可以找到該節點並綁定事件,沒有道理會出現事件綁定不上的問題,但是這種情況的確是遇到了多次,問題原因有待日後深入理解,下面記載一下問題的解決方案。

解決方案:

方案一:將事件綁定直接寫在行內標簽上"<thead onclick=‘myFunction(this)‘ >",其中,this代表的是當前元素,是一個原生對象,如果需要傳一個jQuery對象作為參數,直接寫

"<thead onclick=‘myFunction($(this))‘ >"即可。

同時,事件函數的聲明也是應該放到該段代碼執行之前,比如先引入的公用的js文件中。

方案二:通過事件委派來添加,但是考慮到委派到document上面的事件太多,會增加負擔,所以自己在使用的過程中,采用了方案一。

mui.ajax(‘url‘,{
	data:{},
	dataType:‘jsonp‘,
	type:‘post‘,
	timeout:10000,
	success:function(data){
		var obj = eval(‘(‘+data+‘)‘);
		var result = obj.data;
		var html=‘‘;
		var frag=document.createDocumentFragment();			
		html="<table>"
			+"<thead onclick=‘myFunction(this)‘ class=‘myThead‘>"
				+"<td>序號</td>"
				+"<td>標題1</td>"
				+"<td>標題2</td>"
				+"<td>標題3</td>"
				+"<td>標題4</td>"
				+"<td>標題5</td>"
				+"<td>標題6</td>"
				+"<td>標題7</td>"							
			+"</thead>"							
		+"</table>";
		frag=html;
	 	$(‘body‘).append(frag);		 				 	
//		$(‘.myThead‘).click(function() {
//			alert(‘clicked‘);
//		});
//		function myFunction() {
//			alert(‘clicked‘);
//		}
	},
	error:function(xhr,type,errorThrown){
		mui.toast(‘網絡異常,請稍後再試‘);
	}					
});

如果是采用方案二的話,在ios上面還可能會遇到委派事件失效的問題,具體的問題描述及解決方案如下:

問題描述:

當使用委派給一個元素添加click事件時,如果事件是委托到 documentbody 上,並且委托的元素是默認不可點擊的(如 div, span 等),此時 click 事件會失效

解決方案:直接給需要添加點擊事件的元素添加以下CSS屬性即可

cursor:pointer;

通過js添加的DOM節點的click事件綁定不上的解決方案以及IOS下click事件委派失效的解決方案