我花了一点点,但我想通了,我无法点击,因为我使用的是启用触摸设备的jQuery UI拖动功能的touch.punch脚本对我的投入。 任何人都熟悉这个剧本知道为什么,可能是? 该表格实际驻留下来父对象的树。 有谁知道通过选择一种方法,我可以重写或强制? 我要去尝试绑定,现在强制焦点到输入事件,但也许有人在这里有一些见解?
Answer 1:
JEditable + jQuery UI的可排序+ jquery.ui.touch冲
我花了在这个问题上所有的一天,我终于想通了解决方案。 该解决方案是非常相似的kidwon的答案。 但是,我用jeditable未经类名动态创建输入字段。 所以我用的不是检查类名这个条件语句:
//Check if element is an input or a textarea
if ($(touch.target).is("input") || $(touch.target).is("textarea")) {
event.stopPropagation();
} else {
event.preventDefault();
}
我认为这是一个更好的解决方案,因为它总是使用任何输入或文本区域字段的本地功能。
Answer 2:
伙计们,这里的其他两个答案并没有为我工作,但Danwilliger的解决方案的工作; 然而,这不是他的答案清楚究竟是如何将其设置在触摸冲床JS文件。 对于未来的答案者,这里是做什么。 再次,这是Danwilliger的解决方案 - 我只是澄清。
改变jquery.ui.touch-punch.js此单元(上大约30行):
function simulateMouseEvent (event, simulatedType) {
// Ignore multi-touch events
if (event.originalEvent.touches.length > 1) {
return;
}
event.preventDefault();
var touch = event.originalEvent.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvents');
为此:
function simulateMouseEvent (event, simulatedType) {
// Ignore multi-touch events
if (event.originalEvent.touches.length > 1) {
return;
}
var touch = event.originalEvent.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvents');
//Check if element is an input or a textarea
if ($(touch.target).is("input") || $(touch.target).is("textarea")) {
event.stopPropagation();
} else {
event.preventDefault();
}
祝您好运!
Answer 3:
任何人谁可能使用非常方便touch.punch黑客在这里结束了类似的情况,只是通过一个click事件迫使焦点将工作得很好!
$('.input').bind('click', function(){
$(this).focus();
});
Answer 4:
OK这里的另一个解决办法,如果你的textfield
的任何HTML元素不聚焦,滚动,选择的话,走动文本文本光标和任何不同的情况可能出现,那么你可能会覆盖jquery.ui.touch.punch.js脚本。 我假设你的元素不是拖动一个,但可能它的孩子是我的情况了。
把你的HTML元素的一类,例如class="useDefault"
。 然后去到脚本文件,并发现部分:
...
function simulateMouseEvent (event, simulatedType) {
// Ignore multi-touch events
if (event.originalEvent.touches.length > 1) {
return;
}
event.preventDefault();
var touch = event.originalEvent.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvents');
....
正如你可能会看到event.preventDefault();
确保jquery.ui.touch.punch.js重写浏览器的默认行为。 为了防止我们的特定类节点,进行以下修改:
if (event.originalEvent.touches.length > 1) {
return;
}
var touch = event.originalEvent.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvents');
//As you can see here is your class element check
if (touch.target.className === "useDefault") {
event.stopPropagation();
} else {
event.preventDefault();
}
该解决方案是只和jQuery UI的触摸冲床0.2.2版本WebKit浏览器进行测试。
希望快速的解决方案帮助,BR
Answer 5:
由于@Danwilliger和@jeremytripp的解决方案。 作为这个问题已经相识多年,但仍未工作到触摸冲笔者的混帐回购协议,我添加了这里的解决方案分叉它:
https://github.com/copernicus365/jquery-ui-touch-punch/blob/master/jquery.ui.touch-punch.js
我会很高兴地看到笔者的改变那些几行合并到原来的图书馆,使之成为一件不必要的话,但如果这不会发生,这是很好的有一个源文件引用。
Answer 6:
雅各布的回答有轻微的修改工作,我发现,使用click
事件导致iPad上的不一致的行为,ios9 Safari浏览器。 有时我会在现场按一次,它会集中,其他时间我都得按三次。 更改click
以touchstart
解决了这个问题对我来说(我还用事件代表团自从动态添加我的表单):
$('form').on('touchstart', 'input,textarea',function(){
$(this).focus();
});
Answer 7:
其实,我尝试添加该Danwilliger提到的,它并没有为我做的伎俩行。
什么工作对我来说是
//Check if element is an input or a textarea
if ($(touch.target).is("input") || $(touch.target).is("textarea")) {
event.stopPropagation();
$(touch.target).focus();
} else {
event.preventDefault();
}
我真的不知道为什么贴在其他的答案没有工作,但对于其他人在那里,如果他们有同样的问题试试我解决了:)。
Answer 8:
一个解决方案是使用一个手柄。 里面添加一个图标,并使用这种拖动。 然后投入正常工作。
<li><span class="move">Move</span><input...../></li>
$("#sortableList").sortable({
handle: ".move"
});
Answer 9:
Throttlehead的解决方案为我工作。 也许更简单,只是使用jQuery选择覆盖所有输入和文字区域:
$('input,textarea').bind('click', function(){
$(this).focus();
});