标签: preventdefault

在Firefox中防止jQuery keydown的默认事件

我有jQuery代码,它生成一个可聚焦元素数组,并绑定.keydown左右箭头以标记它们.在Chrome,IE和Safari开头preventDefault()或返回错误(这在技术上我不想用,因为我也没有必要结束stopPropagation())防止箭头的默认事件,但在Firefox它没有.

如何防止Firefox中的默认操作?

下面是代码,它按预期工作,除了在Firefox中,除了我的回调之外还会触发默认事件.

$(function () {
    var focusables = $(":focusable");
    focusables.eq(0).focus();
    focusables.eq(0).select();
    focusables.each(function () {
        $(this).keydown(function (e) {
            if (e.which == '37') { // left-arrow
                e.preventDefault();
                var current = focusables.index(this),
                    next = focusables.eq(current - 1).length ? focusables.eq(current - 1) : focusables.eq(0);
                next.focus();
                next.select();
            }
            if (e.which == '39') { // right-arrow
                e.preventDefault();
                var current = focusables.index(this),
                    next = focusables.eq(current + 1).length ? focusables.eq(current + 1) : focusables.eq(0);
                next.focus();
                next.select();
            }
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

firefox jquery event-handling preventdefault

5
推荐指数
1
解决办法
9604
查看次数

这是对复选框输入的默认点击事件或有缺陷的代码的核心误解吗?

绑定到复选框输入的单击事件时,复选框已经在我的事件处理程序运行时切换,更奇怪的是,如果我指定了event.preventDefault(),则在我的事件处理程序运行后,切换会反转.

<input id="foo" type="checkbox"/>

function clicked(evt) {
   alert(document.getElementById('foo').checked);
   evt.preventDefault();
}

document.getElementById('foo').addEventListener('click',clicked);
Run Code Online (Sandbox Code Playgroud)

[在chrome和firefox中测试]

JSFiddle代码

警报将响应"true"(或复选框预先单击的相反状态).关闭警报后,复选框会切换回来.

所以,我猜问题是,

什么是实际的默认事件被阻止?假设我的事件处理程序应该在状态更改之前运行,我错了吗?有没有办法合法拦截复选框点击?

为什么世界上的preventDefault导致重新切换复选框?

javascript checkbox events preventdefault

5
推荐指数
1
解决办法
365
查看次数

如何防止iOS 5中touchmove事件的默认行为?

我有一个基于Web的应用程序,其中包含一个用户可以用手指向上和向下滚动的组件.我使用事件的preventDefault方法来防止触摸移动在iOS设备上移动整个屏幕的默认行为.

不幸的是,这似乎不再适用于iOS 5,我刚刚升级到今天早上.我不得不假设这在iOS 5中完全不同,但我还没有能够找到提供指令的资源.

谢谢!

更新#1:我无法找到我的具体问题的答案,但我能够调整我的代码以使用-webkit-overflow-scrolling样式(设置为"touch"的值)并实现时髦的惯性滚动功能(内容滚动得更快,取决于你的滑动速度,如果碰到边界,"橡皮筋反弹"会回来.看起来很酷......

更新#2:我现在有另一个奇怪的问题.由于某些奇怪的原因,溢出滚动行为有时会混淆,因此您必须在包含元素上左右拖动手指才能使其内容上下移动.我还没弄清楚为什么会发生这种情况 - 有没有人有任何想法?

javascript javascript-events preventdefault ios5

5
推荐指数
2
解决办法
2万
查看次数

jquery:event:event.preventDefault(); ,e未定义

嘿我有一个jquery函数,在一个锚的onclick事件上触发,该函数如下:

function dropDown(subid, e) {
 e.preventDefault();
 var sub = '#' + subid;
 // hide all submenus first
 $('.subnav').css({'display' : 'none'});
 //Show the Current Subnav 
 $(sub).css({'display' : 'block'});
}
Run Code Online (Sandbox Code Playgroud)

这就是我要触发它的方式:

<a href="#!" onclick="dropDown('sn_cities')" >Cities</a>
Run Code Online (Sandbox Code Playgroud)

但是我收到此错误: e is undefined

我想取消锚链接的默认onclick事件,任何帮助将不胜感激.

javascript jquery preventdefault

5
推荐指数
1
解决办法
2万
查看次数

如何部分防止默认()?

有一个<label><a href="#">内部元素.我想阻止<a>元素的默认行为(即导航),但它应该执行<label>元素的默认行为(即检查其中的复选框).

测试用例:http://jsfiddle.net/3M6WE/.单击foo切换复选框.单击bar不导航但不切换复选框.

我怎么能有<a>元素没有导航,但它切换复选框?我想避免像手动切换复选框一样的黑客攻击.preventDefault如果可以的话,我正在寻找"部分" .

javascript jquery google-chrome preventdefault

5
推荐指数
1
解决办法
505
查看次数

event.preventDefault()究竟是如何影响DOM的?

根据某人的建议,我$('body').on('touchstart', function(event){ event.preventDefault() })在移动网络应用程序中添加了这一行,以禁用iOS中的本机应用程序弹跳.它非常适合禁用反弹但在DOM的其他地方给我一些奇怪的行为.

点击不起作用的事件等.我希望能更好地理解它的作用以及如何解决它在DOM中其他地方的影响.

谢谢!

编辑:

我有这两行:

  $('body').on('touchstart', function(e){ e.preventDefault() };
  $('#home').on('click', function(){ alert('home') };
Run Code Online (Sandbox Code Playgroud)

如果我注释掉该preventDefault行,则该#home行有效.如果我把它留在#home行没有回应.#home只是一个div嵌套在body.

知道什么可能导致这种行为?它是更大代码库的一部分所以它很难给你所有细节,但我甚至不知道从哪里开始.

再次感谢!

html javascript jquery preventdefault

5
推荐指数
1
解决办法
2627
查看次数

在每个输入之间迭代以验证值

我有这个代码,如果为空,则验证输入的值,并使用twitter bootstrap popover显示消息错误:

$(document).on("ready", login_events());

function login_events(){

    $("#userId, #password").on("change", validateEmpty);
    $("#loginButton").on("click", validateAll);

}

function validateEmpty(){

    input = $(this);
    input.popover({animation: true, placement: 'right', trigger: 'manual', title: 'Field is Empty', content: input.attr("data-empty-message")});
    isValid = true;

    if(input.val() === ""){
        input.popover('show');
        isValid =  false;
    }
    else{
        input.popover('hide');
    }

    return isValid;

}
Run Code Online (Sandbox Code Playgroud)

这在改变事件完成时非常有效,但我想做另一个函数,它将在表单中的每个输入之间进行迭代,验证它是否为空(validateEmpty())和preventDefault(如果有的话)为空.

正如您所看到的,我为#loginButton设置了click事件,以运行validateAll函数,我有类似的东西,但无法找到正确的方法:

function validateAll(event){

    $("#loginForm input").each(validateEmpty);

}
Run Code Online (Sandbox Code Playgroud)

forms validation each jquery preventdefault

5
推荐指数
1
解决办法
223
查看次数

javascript阻止光标移动

在输入框中,我想停止光标的传播,就像我在向上键"↑"上键入一样:

之前:

tes|t//光标在t之前

之后:

|test //光标开始了

我想阻止光标移动,所以它必须在t之前停留.

到目前为止,我正在尝试这个,但它不起作用:

$('input').keyup(function(e) {

    if (e.which == 40) { // up key
        e.stopPropagation();
        e.stopImmediatePropagation();
        e.preventDefault();

        // actions

        return false;
    }

}
Run Code Online (Sandbox Code Playgroud)

这还有可能吗?

javascript preventdefault stoppropagation

5
推荐指数
1
解决办法
2008
查看次数

jQuery preventDefault()在AJAX调用中不起作用

所以,当用户输入电子邮件以查看电子邮件是否存在时,我正在检查.

 $('form.recover-form#check-form').on('submit', function(e){

    var form    = $(this),
        input   = $('.check-recover-email'),
        span    = $('.recover-error'),
        email   = input.val();
    span.text('');
    e.preventDefault();
    $.ajax({
        url: 'ajax/check-email',
        async: 'false',
        cache: 'false',
        type: 'POST',
        data: {email: email},
        success: function(response) {
            if ( response == 'no' ) {
                span.text('email does not exist');
            } else if ( response == 'ok' ) {
                form.submit();
            }
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

PHP代码

if ( Input::isPost('email') )  {

    $email = Input::post('email');

    $check = $dbh->prepare(" SELECT * FROM users WHERE email = :email ");
    $check->execute(array( …
Run Code Online (Sandbox Code Playgroud)

php ajax jquery preventdefault

5
推荐指数
1
解决办法
2万
查看次数

防止触摸在Android浏览器中生成mouseOver和mouseMove事件

我正在建立一个需要在PC,Mac和移动浏览器上进行触摸和鼠标交互的页面。

在用于touchStart,touchMove,touchEnd和touchCancel的事件处理程序方法中,我正在调用event.preventDefault以防止移动浏览器同时触发触摸和鼠标事件。

这对于mouseDown和mouseUp效果很好,当我触摸屏幕时它们不会被触发,但是由于某种原因,每次touchStart被触发后一小会儿(夫妇100ms),Android浏览器仍然会触发mouseMove事件(在第一个touchStart上) ,此mouseMove之前带有mouseOver)。如果我足够快地触摸,那么touchEnd之后会触发mouseMove(相对于touchStart而言具有相同的延迟)。

我真的很想防止触摸产生任何鼠标事件,并且我也想详细了解这里发生的事情,所以我有以下问题:

  • 我是否还有其他未捕获的触摸事件导致mouseMove事件?
  • 为什么mouseMove相对于触摸开始有点延迟?
  • 为什么其他任何触摸事件(touchMove,touchEnd)都不生成mouseMove?
  • 其他浏览器是否有可能会因触摸而产生鼠标事件的怪癖?
  • 是否有不同的跨平台方法来防止触摸导致鼠标事件?也许一些CSS?

javascript mouseover touch mousemove preventdefault

5
推荐指数
0
解决办法
658
查看次数