[英]Differentiate between focusin and click JQuery event
所以我已經為此苦了一段時間了。 我有一個輸入列表,並且焦點事件和單擊事件應該根據單擊/集中的輸入來更新選擇。 我為此使用JQuery。
<body>
<input id="d1" type="text" value="a">
<input id="d2" type="text" value="few">
<input id="d3" type="text" value="words">
</body>
我想要的是
我嘗試了什么
<script type="text/javascript">
var stuff = {};
$(document).ready(function () {
for (var i = 1; i <= 3; i++) {
var selector = "#d" + i;
$(selector).on({
"focusin": function(event) {
stuff = {};
stuff[selector] = true;
},
"click": function(event) {
if (!event.ctrlKey) {
stuff = {};
}
stuff[selector] = true;
}
});
}
});
</script>
但是, click
會導致focusin
,因此始終清除選擇。 因此,我嘗試從focusin
事件中獲取ctrlKey
,但只有MouseEvents具有ctrlKey
屬性。
我的問題
focusin
事件是否可能知道click
事件之后是否發生? 還是我使用了錯誤的聽眾?
我已經在Google上搜索了一段時間,但是當我添加focus
,大多數網站都將focus
集中在jQuery上,或者檢查某個元素是否被聚焦,所以不幸的是,這沒有讓我更進一步。 我已經找到了,但是我自己也無法從中得出答案:
由於焦點事件始終會觸發,因此似乎沒有開箱即用的方式來區分“僅焦點”事件和“焦點后有點擊”事件
但是您可以通過簡化不同的步驟來利用它。 步驟1:由於始終先觸發焦點事件,因此此處將進行選擇刪除並使用當前值進行更新。 步驟2:由於滿足ctrl條件的單擊事件可能隨后發生,因此我們將備份選擇數據,然后再將其刪除。步驟3:單擊事件將在ctrl條件下恢復備份的選擇,或者僅刪除備份。 (因為它已在焦點事件中更新)
在代碼中,這意味着:
var stuff = {}; //empty global stuff object
var oldStuff = {}; //empty global backup object
$('input').on({
"focusin": function (event) {
oldstuff = stuff; // backup your stuff
stuff = {}; // delete your stuff
stuff[$(this).attr('id')] = $(this).val(); // get the current value
console.log("focussed stuff");
console.log(stuff); // show it in console
},
"click": function (event) {
if (event.ctrlKey) { // if ctrl key was used
$.extend(stuff, oldstuff); // merge oldstuff back into stuff
} else if (!event.ctrlKey) {
oldstuff = {}; // else delete oldstuff
}
console.log("clicked stuff");
console.log(stuff); // show stuff
}
});
看到小提琴: http : //jsfiddle.net/eL19p27L/2/
變更事件在這里不見了-但我希望您能明白我將如何做;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.