gpt4 book ai didi

javascript - jQuery 代码适用于 JSFiddle,但不适用于我的网络应用程序

转载 作者:行者123 更新时间:2023-11-28 00:09:43 26 4
gpt4 key购买 nike

我在使用 jQuery 时遇到了一个奇怪的问题。我在页面上有一组按钮,当长按时,它们会在按钮的位置弹出一个输入框。 <强> Here's the fiddle.

HTML

<div class="popupView" id="recoveryView">
<button class="intervalBtn" type="button" name="recovery0" id="recovery0">00:30</button>
<button class="intervalBtn" type="button" name="recovery6" id="recovery6">00:35</button>
<button class="intervalBtn" type="button" name="recovery1" id="recovery1">02:00</button>
<button class="intervalBtn" type="button" name="recovery7" id="recovery7">03:00</button>
<button class="intervalBtn" type="button" name="recovery2" id="recovery2">04:00</button>
<button class="intervalBtn" type="button" name="recovery8" id="recovery8">05:00</button>
</div>
<input id="edit_interval" type="text" />

CSS

.popupView {
background: #999999;
-webkit-border-radius: 6px;
-webkit-box-shadow: 0 0 4px #333333;
width: 30%;
height: 70%;
position: absolute;
}
.intervalBtn {
color: blue;
background: #CCCCCC;
-webkit-border-radius: 6px;
width: 41%;
height: 12.5%;
float: left;
margin-left: 6%;
margin-top: 3%;
font: 12pt sans-serif;
}
.recoveryBtn {
color: blue;
background: #CCCCCC;
-webkit-border-radius: 6px;
width: 88%;
height: 12.5%;
float: left;
margin-left: 6%;
margin-top: 3%;
font: 12pt sans-serif;
}
.intervalBtn.selected, .recoveryBtn.selected {
color: #CCCCCC;
background: blue;
}
body {
position:absolute;
overflow: hidden;
bottom: 0;
left: 0;
right: 0;
top: 0;
user-select: none;
-moz-user-select: none;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
body > div {
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
#edit_interval {
display: none;
position: absolute;
}

JavaScript

$(".intervalBtn").click(function () {
$(".intervalBtn").removeClass("selected");
$(this).addClass('selected');
}).mouseup(function () {
clearTimeout(pressTimer);
return false;
}).mousedown(function () {
// Set timeout
pressTimer = window.setTimeout(function () {
console.log("interval button long click");

$("#edit_interval").css("display", "block").css("left", $(this).position().left).css("top", $(this).position().top);
}, 1000)
return false;
});

如果在 fiddle 中运行,唯一的问题是盒子的位置(我是否错误地获得了左侧和顶部的位置?),但是当我在实际的网络应用程序(在 Safari 中)上测试时,我得到以下错误长按日志后出现无输入框:

TypeError: 'undefined' is not a valid argument for 'in' (evaluating 't in e')

jQuery.min.js: 5

所以这是一个由两部分组成的问题(重点放在第 1 部分):

  1. 为什么会出现此错误(是错误吗?),我该如何解决?
  2. 如何将输入框设置到正确的位置?

编辑

按照评论中的建议,我将 jquery.min.js 换成了 jquery.js,并且出现了一个更容易调试的错误:

TypeError: 'undefined' is not a valid argument for 'in' (evaluating 'name in style')

第 6643 行。这是来自 jQuery.js 的代码:

// return a css property mapped to a potentially vendor prefixed property
function vendorPropName( style, name ) {

// shortcut for names that are not vendor prefixed
if ( name in style ) { //<---This is the line that causes the error
return name;
}

// check for vendor prefixed names
var capName = name.charAt(0).toUpperCase() + name.slice(1),
origName = name,
i = cssPrefixes.length;

while ( i-- ) {
name = cssPrefixes[ i ] + capName;
if ( name in style ) {
return name;
}
}

return origName;
}

这是否意味着 jQuery 找不到 CSS 属性 lefttop

最佳答案

对于问题的第 2 部分,您的 this 不是您期望的 this,因为它在 window.setTimeout() 范围内功能。您需要在 setTimeout() 的范围之外获取对 this 的引用(或者只是被点击元素的位置)。相关代码如下。我更新了你的 fiddle here .请注意 position函数不考虑边距或填充。

var pos = $(this).position();

// Set timeout
pressTimer = window.setTimeout(function()
{
console.log("interval button long click");

$("#edit_interval").css({"left": pos.left + 'px', "top": pos.top + 'px'}).show();
},1000)
return false;

关于javascript - jQuery 代码适用于 JSFiddle,但不适用于我的网络应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16068281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com