我正在尝试使用HREF为链接编写非常标准的JS行为 onClick处理程序,我面临一个奇怪的问题,我认为这是Android上的焦点/触摸模式行为。
有时当我点击链接而不是执行动作时,它只是选择/聚焦,只有一个焦点矩形,或者甚至还有一个填充的焦点矩形(选择而不是只聚焦?)。
现在的伪代码是
<a href="#" onClick="toggleDivBelowToShowHide(); return false;">go</a>
我尝试过这样的事情:
<a href="#" onTouchStart="toggleDivBelowToShowHide(); return false;">go</a>
但我仍然在某些时候遇到同样的麻烦问题。
答案 0 :(得分:2)
尝试在webview上启用Javascript。
在包含webview的活动中,试试这个......
WebView wv = (WebView) findViewById(R.id.webview);
wv.getSettings().setJavaScriptEnabled(true);
我遇到了同样的问题,但发现这是因为我没有启用Javascript。
答案 1 :(得分:0)
尝试删除href
属性,看看是否有帮助。例如,使用WebView
组件查看时,此方法有效:
<p><a onClick="whereami()">Update Location</a></p>
答案 2 :(得分:0)
我想知道它是否与onclick
有关 - 我是否正确地假设每次不断点击任何链接都不遵循它?对我而言,这似乎与您触摸屏幕的方式(或解释方式)有关,例如可以通过单击 next 链接并拖动一点,而不是单击 on 链接?
(如果我的假设是正确的,那么这可能是错误的硬件:也许你可以试试另一个设备?或者它可能只发生在链接的特定一侧如果屏幕没有很好地对齐,那么可能会一些软件偏移可以改变吗?)
答案 3 :(得分:0)
尝试在页面代码中插入此“驱动程序”,并告知我们是否有效。 。 。它似乎在我的网站上工作有同样的问题:
//Mouse & Touch -> Consistent Click / Mouse Commands -> Useful driver
(function() {
var isTouch = false;
var simulated_flag = 'handler_simulated';
var touch_click_array = {};
const clickMoveThreshold = 20; //Pixels
function mouseHandler(event) {
if (isTouch) {
if (!event.hasOwnProperty(simulated_flag)) {
//Unreliable mouse commands - In my opinion
var fixed = new jQuery.Event(event);
fixed.preventDefault();
fixed.stopPropagation();
}
}
else {
//Mouse commands are consistent
//TODO: generate corresponding touches
}
}
function mouseFromTouch(type, touch) {
var event = document.createEvent("MouseEvent");
event.initMouseEvent(type, true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY
, false, false, false, false, 0, null);
event[simulated_flag] = true;
touch.target.dispatchEvent(event);
};
function touchHandler(event) {
var touches = event.changedTouches
,first = touches[0]
,type = ""
;
if (!event.hasOwnProperty(simulated_flag)) {
isTouch = true;
//Simulate mouse commands
switch (event.type) {
case "touchstart":
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
touch_click_array[touch.identifier] = { x: touch.screenX, y: touch.screenY };
}
mouseFromTouch("mousedown", first);
break;
case "touchmove":
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
var id = touch.identifier;
var data = touch_click_array[id];
if (data !== undefined) {
if (Math.abs(data.x - touch.screenX) + Math.abs(data.y - touch.screenY) > clickMoveThreshold) {
delete touch_click_array[id];
}
}
}
mouseFromTouch("mousemove", first);
break;
case "touchcancel":
//Not sure what should happen here . . .
break;
case "touchend":
mouseFromTouch("mouseup", first);
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
if (touch_click_array.hasOwnProperty(touch.identifier)) {
mouseFromTouch("click", touch);
delete touch_click_array[touch.identifier];
}
}
break;
}
}
}
document.addEventListener("mousedown", mouseHandler, true);
document.addEventListener("mousemove", mouseHandler, true);
document.addEventListener("mouseup", mouseHandler, true);
document.addEventListener("click", mouseHandler, true);
document.addEventListener("touchstart", touchHandler, true);
document.addEventListener("touchmove", touchHandler, true);
document.addEventListener("touchcancel", touchHandler, true);
document.addEventListener("touchend", touchHandler, true);
})();
现在它不是100%完整的脚本 - 多点触控可能有点不稳定,如果你根据触摸命令构建了一个界面,它就不会生成这个版本的界面。但是,它修复了我的链接点击问题。
嗯 - ps - 它正在使用jQuery。如果你需要一个非jQuery版本,你可以从new jQuery.Event
函数中删除mouseHandler()
(换句话说,使用原始事件:var fixed = event;
),我相信大多数浏览器没关系。我不是一个js兼容性专家。
PPS - 使用Android 1.6进行测试
PPPS - 必须修改脚本以允许阈值 - 实际设备在按下期间触发移动事件时遇到一些问题。可能不理想;如果有人想要更好的方式来做这件事,我会有兴趣听到......
答案 4 :(得分:0)
最近我遇到了完全相同的问题。我在按钮上使用了onclick。有时它根本没有执行javascript。对我有用的是在webview中加载URL之前启用javascript
// Enable javascript
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
// To bind javascript code to android
mWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
mWebView.loadUrl(url);