由object元素引出的事件註冊問題和層級顯示問題

2022-01-28 15:39:35 字數 2931 閱讀 6789

在實施第二種方案的過程中,發現如下兩個問題:

在第二種方案中,首先經過測試新增單擊或雙擊事件均無響應。

(疑問1:object不支援單雙擊事件?但在ie下發現這種方式可以響應:

function fullscreen(a)/**

*錯誤的方式:不傳引數,會彈出undefined,會直接執行fullscreen函式,這段**相當於如下兩行:

*var temp=fullscreen(); 

*document.getelementbyid("objectid").onclick=temp;

*/document.getelementbyid("objectid").onclick=fullscreen();

/***錯誤的方式:傳引數時,會彈出1,會直接執行fullscreen函式,這段**相當於如下兩行:

*var temp=fullscreen(1); 

*document.getelementbyid("objectid").onclick=temp;

*/document.getelementbyid("objectid").onclick=fullscreen(1);

/***正確的方式,此時會彈出event物件,但由於object元素不支援事件所以並不響應

*/document.getelementbyid("objectid").onclick=fullscreen;

結論:在通過物件的屬性註冊事件函式的時候,表示式的右值必須為乙個函式名字即不帶括號,並且不可手動傳遞引數(瀏覽器會將event物件自動傳入或window.event),

從表示式本身出發我們也能發現,表示式為乙個賦值表示式,『=』的右值是乙個指向函式的位址,

當只寫函式名字的時候,此時右值的函式名字相當於乙個指標,指向函式體所在的記憶體位址,等到事件發生時就會呼叫並執行相應的函式。

但是當加了括號後,會首先計算右邊的函式體,而函式體執行必然會返回乙個值(顯示的return返回值或undefined),這個值則會作為右值賦值給onclick等類似的屬性。

經過測試,在ie下,不管是屬性註冊事件或者方法註冊事件均不能響應。即object作為乙個嵌入物件元素是不支援瀏覽器中各種事件的,這樣做的目的可能是作為乙個引用外部資源的元素來說,object本身不具備響應事件的能力,而把這種互動能力給予外部的物件,以避免類似activex這樣的控制項的行為與object的行為衝突。

然後我想通過透明div覆蓋object,給div新增單雙擊事件,但是發現div無法覆蓋,查閱後才知道object似乎擁有很高的層級。

(疑問2:object作為嵌入物件元素是否在web文件流中?我的猜測:從web歷史上來看,web文件最初是用來顯示文字的,作為引用外部資源的object元素是不在文件流中的,而且我發現在ie下選取元素的時候是無法選取到object元素的,其他瀏覽器暫時未測試。)

從查閱得知iframe的層級高於object,於是便設定div覆蓋iframe,iframe覆蓋object,從而間接實現div覆蓋object。

雖然覆蓋可以實現,但是有乙個問題就是當div和iframe都設定透明時,object似乎夾在二者中間被貫穿了,直接一透到底,透明的下面不是object,而是網頁的底色。

1

<

div

class

="wrap2-item-video1"

>

2<

div

ondblclick

="fullscreen()"

style

="color:#fff;font-size:12px;position:absolute;background:green;width:50px;height:50px;top:0;left:0;z-index:9;"

>

3放大/縮小

如上,div(綠色,zindex:9),iframe(紅色,zindex:1),object三者的層級關係。

修改div的背景,新增邊框,修改iframe的背景後,如上,div(紅色邊框透明,zindex:9),iframe(透明,zindex:1),object三者的層級關係。

最後:似乎第二種方案並不可行,只能修改成通過不在object元素範圍內的元素控制大小的方案,比如在頁面裡新增個button並繫結事件或者重寫控制項新增互動事件。

由object不能比較引發的問題

這是乙個小問題,請看下面的 using system using system.collections.generic using system.linq using system.text namespace sample 我們假設有兩個變數,其實它們是int,但程式用object來接收它們。然後...

由DOS格式引出的shell指令碼問題

問題描述 shell指令碼從配置檔案中讀取ip,然後對讀取ip進行處理,但是碰到乙個問題,讀取的ip,總是不正確。指令碼很簡單。將指令碼與配置檔案簡化後發現乙個奇怪的問題,其實問題比較簡單,只是沒有注意到,導致分析了很長的時間,現記錄下來。bash 指令碼如下 1 2 3 4 5 6 7 bin b...

由C assign 函式引出的乙個問題

今天學習了下c 的assign 函式。從字面上來說,assign 函式是給容器進行分配新的空間,把新的值拷貝到容器內。恰好發現一篇學習部落格 該部落格上 如下 關於assign的函式的好處,應該很好理解就是在不能使用賦值符 的情況下,可以將乙個容器中的部分元素通過迭代器傳遞賦值到另乙個容器中,但是在...