与evt.preventDefault()相反的是什么;

时间:2011-04-13 15:42:21

标签: javascript jquery preventdefault

一旦我解雇了evt.preventDefault(),我该如何重新恢复默认操作?

19 个答案:

答案 0 :(得分:79)

根据@Prescott的评论,与之相反:

evt.preventDefault();

可能是:

基本上等同于'do default',因为我们不再阻止它。

否则我倾向于指出另一条评论和答案提供的答案:

How to unbind a listener that is calling event.preventDefault() (using jQuery)?

How to reenable event.preventDefault?

请注意,第二个已被一个示例解决方案接受,由redsquare给出(如果没有作为重复关闭,这里发布了直接解决方案):

$('form').submit( function(ev) {
     ev.preventDefault();
     //later you decide you want to submit
     $(this).unbind('submit').submit()
});

答案 1 :(得分:51)

function(evt) {evt.preventDefault();}

及其相反的

function(evt) {return true;}

喝彩!

答案 2 :(得分:14)

在继续jQuery中的click事件的链接之前处理命令:

例如:<a href="http://google.com/" class="myevent">Click me</a>

使用jQuery预防并完成:

$('a.myevent').click(function(event) {
    event.preventDefault();

    // Do my commands
    if( myEventThingFirst() )
    {
      // then redirect to original location
      window.location = this.href;
    }
    else
    {
      alert("Couldn't do my thing first");
    }
});

或者只需在window.location = this.href;

之后运行preventDefault();

答案 3 :(得分:8)

mysql> \! mysql -h localhost -u bookorama -pXXXXX < bookorama.sql

及其相对(标准):

event.preventDefault(); //or event.returnValue = false;

来源: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue

答案 4 :(得分:6)

我不得不在jQuery中延迟表单提交以执行异步调用。这是简化的代码......

$("$theform").submit(function(e) {
    e.preventDefault();
    var $this = $(this);
    $.ajax('/path/to/script.php',
        {
        type: "POST",
        data: { value: $("#input_control").val() }
    }).done(function(response) {
        $this.unbind('submit').submit();
    });
});

答案 5 :(得分:6)

好的!它适用于点击事件:

$("#submit").click(function(e){ 

   e.preventDefault();

  -> block the click of the sumbit ... do what you want

$("#submit").unbind('click').click(); // the html click submit work now !

});

答案 6 :(得分:4)

我建议采用以下模式:

document.getElementById("foo").onsubmit = function(e) {
    if (document.getElementById("test").value == "test") {
        return true;
    } else {
        e.preventDefault();
    }
}

<form id="foo">
    <input id="test"/>
    <input type="submit"/>
</form>

......除非我遗漏了什么。

http://jsfiddle.net/DdvcX/

答案 7 :(得分:4)

event.preventDefault()没有相反的方法可以理解为什么在调用它时首先要查看event.preventDefault()的内容。

在引擎盖下,preventDefault的功能本质上是调用return false,它会停止任何进一步的执行。如果你熟悉Javascript的旧方法,那么曾经使用return false来取消使用return true(在jQuery甚至可以使用之前)表单提交和按钮之类的事件。

根据上面的简单解释,您可能已经解决过了:event.preventDefault()的反面是什么。您只是不阻止该事件,默认情况下,如果您没有阻止该事件,浏览器将允许该事件。

请参阅以下说明:

;(function($, window, document, undefined)) {

    $(function() {
        // By default deny the submit
        var allowSubmit = false;

        $("#someform").on("submit", function(event) {

            if (!allowSubmit) {
                event.preventDefault();

                // Your code logic in here (maybe form validation or something)
                // Then you set allowSubmit to true so this code is bypassed

                allowSubmit = true;
            }

        });
    });

})(jQuery, window, document);

在上面的代码中,您会注意到我们正在检查allowSubmit是否为false。这意味着我们将阻止我们的表单使用event.preventDefault提交,然后我们将执行一些验证逻辑,如果我们感到满意,请将allowSubmit设置为true。

这实际上是与event.preventDefault()相反的唯一有效方法 - 您也可以尝试删除事件,这基本上可以达到同样的效果。

答案 8 :(得分:2)

我认为“对立面”是模拟一个事件。您可以使用.createEvent()

按照Mozilla的例子:

function simulateClick() {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
  var cb = document.getElementById("checkbox"); 
  var cancelled = !cb.dispatchEvent(evt);
  if(cancelled) {
    // A handler called preventDefault
    alert("cancelled");
  } else {
    // None of the handlers called preventDefault
    alert("not cancelled");
  }
}

参考:document.createEvent


jQuery有.trigger()所以你可以触发元素上的事件 - 有时很有用。

$('#foo').bind('click', function() {
      alert($(this).text());
});

$('#foo').trigger('click');

答案 9 :(得分:2)

这是我以前设定的:

$("body").on('touchmove', function(e){ 
    e.preventDefault(); 
});

要撤消它:

$("body").unbind("touchmove");

答案 10 :(得分:1)

jquery on()可能是另一个解决方案。特别是在使用namespaces

jquery on()只是当前绑定事件的方式(而不是bind())。 off()是取消绑定这些。当您使用命名空间时,您可以添加和删除多个不同的事件。

$( selector ).on("submit.my-namespace", function( event ) {
    //prevent the event
    event.preventDefault();

    //cache the selector
    var $this = $(this);

    if ( my_condition_is_true ) {
        //when 'my_condition_is_true' is met, the binding is removed and the event is triggered again.
        $this.off("submit.my-namespace").trigger("submit");
    }
});

现在使用命名空间,您可以添加多个这些事件,并且可以根据您的需要删除这些事件..虽然提交可能不是最好的示例,但这可能会在点击或按键或任何..

答案 11 :(得分:1)

这不是问题的直接答案,但可能会对某人有所帮助。我的意思是,您只能根据某些条件调用preventDefault(),因为如果在所有情况下都调用preventDefault(),则没有事件发生的意义。因此,只有在满足条件时才具有if条件并调用preventDefault()才能在其他情况下以通常的方式起作用。

function CardMedia(props) {
  return (
    <div style={{
      backgroundImage: props.backgroundImage,
    }}>
    { /* implement the rest of the card...*/ } 
    </div>
  );
}

答案 12 :(得分:1)

这里有用的东西......

首先,我们点击链接,运行一些代码,然后我们将执行默认操作。这可以使用 event.currentTarget 来看看。在这里,我们将尝试在新标签页上访问Google,但在我们需要运行某些代码之前。

<a href="https://www.google.com.br" target="_blank" id="link">Google</a>

<script type="text/javascript">
    $(document).ready(function() {
        $("#link").click(function(e) {

            // Prevent default action
            e.preventDefault();

            // Here you'll put your code, what you want to execute before default action
            alert(123); 

            // Prevent infinite loop
            $(this).unbind('click');

            // Execute default action
            e.currentTarget.click();
        });
    });
</script>

答案 13 :(得分:0)

您可以随时使用附加到脚本中的某些点击事件:

location.href = this.href;

用法示例是:

jQuery('a').click(function(e) {
    location.href = this.href;
});

答案 14 :(得分:0)

这里没有任何解决方案对我有帮助,我这样做是为了解决我的情况。

public func blur(_ size: Int) -> UIImage! {       
    let boxSize = size - (size % 2) + 1
    let image = self.cgImage
    let inProvider = image?.dataProvider

    let height = vImagePixelCount((image?.height)!)
    let width = vImagePixelCount((image?.width)!)
    let rowBytes = image?.bytesPerRow

    var inBitmapData = inProvider?.data
    let inData = UnsafeMutableRawPointer(mutating: CFDataGetBytePtr(inBitmapData))
    var inBuffer = vImage_Buffer(data: inData, height: height, width: width, rowBytes: rowBytes!)

    let outData = malloc((image?.bytesPerRow)! * (image?.height)!)
    var outBuffer = vImage_Buffer(data: outData, height: height, width: width, rowBytes: rowBytes!)

    var error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, nil, 0, 0, UInt32(boxSize), UInt32(boxSize), nil, vImage_Flags(kvImageEdgeExtend))
    error = vImageBoxConvolve_ARGB8888(&outBuffer, &inBuffer, nil, 0, 0, UInt32(boxSize), UInt32(boxSize), nil, vImage_Flags(kvImageEdgeExtend))
    error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, nil, 0, 0, UInt32(boxSize), UInt32(boxSize), nil, vImage_Flags(kvImageEdgeExtend))
    inBitmapData = nil
    let colorSpace = CGColorSpaceCreateDeviceRGB()
    let context = CGContext(data: outBuffer.data, width: Int(outBuffer.width), height: Int(outBuffer.height), bitsPerComponent: 8, bytesPerRow: outBuffer.rowBytes, space: colorSpace, bitmapInfo: (image?.bitmapInfo.rawValue)!, releaseCallback: {(ptr1, ptr2) in
    }, releaseInfo: outData)!
    var imageRef = context.makeImage()
    let bluredImage = UIImage(cgImage: imageRef!)
    imageRef = nil
    free(outData)
    context.flush()
    context.synchronize()
    return bluredImage
}

函数<a onclick="return clickEvent(event);" href="/contact-us">

clickEvent()

答案 15 :(得分:0)

你可以在&#34; preventDefault&#34;之后使用它。方法

//这里evt.target返回默认事件(例如:defult url等)

var defaultEvent=evt.target;

//这里我们保存默认事件..

if("true")
{
//activate default event..
location.href(defaultEvent);
}

答案 16 :(得分:0)

在同步流中,您仅在需要时调用 e.preventDefault()

a_link.addEventListener('click', (e) => {
   if( conditionFailed ) {
      e.preventDefault();
      // return;
   }

   // continue with default behaviour i.e redirect to href
});

在异步流程中,您有很多方法,但最常见的是使用 window.location

a_link.addEventListener('click', (e) => {
     e.preventDefault(); // prevent default any way

     const self = this;

     call_returning_promise()
          .then(res => {
             if(res) {
               window.location.replace( self.href );
             }
          });
});

您肯定可以使用 async-await

使上述流程同步

答案 17 :(得分:-1)

这个代码让我在使用后重新实例化了事件:

event.preventDefault(); to disable the event.


event.preventDefault = false;

答案 18 :(得分:-1)

我使用了以下代码。它对我来说很好。

$('a').bind('click', function(e) {
  e.stopPropagation();
});