event 对象兼容火狐、谷歌、ie浏览器问题
? ? ? ? 項目中遇到這樣一個業務需求:給動態生成的頁面元素(input、div、checkbox等)添加事件,業務實現的難點在于:動態生成的頁面元素的id、name都是按一定規則賦值的(例如:input1、input2..),那么給這些元素添加事件需要獲取到動態生成元素的id或name屬性值,根據屬性值取到元素對象然后添加事件。
? ? ? ? ? ? 經過以上分析不難看出:難點就在于取得動態生成元素的id、name屬性值,給元素添加事件應該很容易辦到,這時js中一個重要的對象event 該隆重出場了。
? ? ? ? 事件發生的過程中 event對象才生效,event對象有很對屬性:例如觸發event對象的元素、鼠標的位置及狀態、按下的鍵等等。 event的某些屬性只對特定的事件有意義。比如,fromElement?和?toElement?屬性只對?onmouseover?和?onmouseout?事件有意義。 具體event 的對象的眾多屬性在此就不做詳細的介紹,網上關于event屬性介紹的帖子很多。
? ? ? ? ?獲取當前觸發事件的頁面元素 使用event的target和srcElement 屬性,srcElement 在ie中使用,target在firefox中使用,chrome瀏覽器同時具有這兩個屬性,但據我個人測試,target屬性在ie10中也可以使用了(ie其他版本沒有測試),這樣如果我要獲取觸發事件的元素的屬性值就可以搞定了:
? ? ? ? ?var name_val = event.target.name;
? ? ? ? ?var id_val = event.target.id;
? ? ? ? ?但是問題出現了:在火狐瀏覽器中不能直接用event對象,瀏覽器無法根據當前觸發的事件獲取event對象。解決方法有這么幾種:
? ? ? ? (1)調用事件方法時添加參數event(參數名稱必須為event,其他名稱不可以),例如: function aa(event){........} ,元素:<input type="text" οnclick="aa(event)"></input>
? ? ? ? ? (2)使用函數 ??arguments.callee.caller.arguments[0] 獲取event對象,使用這種方法不需要在函數中聲明event參數,可以直接使用,而且在火狐瀏覽器中有效
? ? ? ? ?(3)為火狐瀏覽器聲明可以直接調用的event對象:
? ? ? ? ?
?
? ? ? ? ?
具體項目中的應用代碼是這樣的:
for ( var m = 1; m <= 5; m++) {
$("#startTime" + m).blur(
function() {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var e = arguments.callee.caller.arguments[0] || window.event;?
var idVal = e.target.id;
var startTime_ = $("#" + idVal).val();
var timePart = $('#dutyPart').val();
if (startTime_ != null && startTime_ != ""
&& startTime_ != undefined && timePart != 0) {
autoInitStartAndOffTime(idVal, startTime_, timePart);
}
});
$("#endTime" + m).blur(
function() {
var e = arguments.callee.caller.arguments[0] || window.event;
var idVal = e.target.id;
var endTime_ = $("#" + idVal).val();
var timePart = $('#dutyPart').val();
if (endTime_ != null && endTime_ != ""
&& endTime_ != undefined && timePart != 0) {
autoInitStartAndOffTime(idVal, endTime_, timePart);
}
});
}
? ? ? ?這樣就實現了event 瀏覽器的兼容問題。
? ? ? ? ? ??
總結
以上是生活随笔為你收集整理的event 对象兼容火狐、谷歌、ie浏览器问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 史上最全NLP工具数据集下载汇总,不用积
- 下一篇: 舰c安卓端html5,战舰世界舰C舰N美