繁体   English   中英

jQuery:event.preventdefault();

[英]jQuery: event.preventdefault();

如果我自己创建click事件及其处理程序,那么在正确的位置执行event.preventdefault()没问题。 但是,如果有一个已经注册了单击事件和相应处理程序的元素,在某些情况下,我想停用其进一步的工作(例如,提交)。

这是示例:

页面上有一个提交按钮,带有已注册的单击元素(可能约有数百个验证例程。)和具有特定值的变量(al)。 是此变量的瞬时值= 5(在某些情况下不是所需的值->值为= 3)。

HTML

// other form elements
<input type="submit" name="next" value="go"/>

jQuery的JavaScript

var al = 3;

$("input[type='submit'][name='next']").click(
    function(event) {
        if (al != 3) {
            alert (al+': Not OK');
            event.preventDefault();
        } else {
            alert ('OK');
        }
    }
);

在此示例中,我无法阻止表单被提交。 我怎么了

编辑:event.preventDefault ist不是问题,崇高(我的编辑器)还是可以纠正它。

-----我想简化这个问题---------

那是一个SubmitButon(这次是从原始上下文中的yii):

视图

echo CHtml::submitButton(
Yii::t ('Somethin', 'next'),
    array( 
        'name' => 'next', 
        'onclick' => "checkDetails()"
    ));

JS

checkDetails() {
    PREVENT_SUBMITTING
}

PREVENT_SUBMITTING的外观如何? 在这种情况下,没有任何条件会阻止提交?

更改

event.preventdefault();

event.preventDefault();

您必须将“ D”写为大写字母。

您可以通过两种方式进行

$("input[type='submit'][name='next']").click(
    function(event) {
        if (al != 3) {
            alert (al+': Not OK');
            event.preventDefault();
        } else {
            alert ('OK');
        }
    }
);

要么

$("input[type='submit'][name='next']").click(
    function(event) {
        if (al != 3) {
            alert (al+': Not OK');
            return false;
        } else {
            alert ('OK');
            return true;
        }
    }
);

现在我有一个可行的解决方案:

视图

echo PHtml::submitButton(Yii::t('Something', 'next'),
    array( 
        'name' => 'next',
        'onclick' => "return checkDetails(event)",
    )
);

jQuery的

function checkDetails (event) {
    event.preventDefault();
    event.returnValue =false; // for IE
    return false;
}
$("input[type='submit'][name='next']").click(
    function(event) {
        if (al != 3) {
            alert (al+': Not OK');
            event.preventDefault();
        } else {
            alert ('OK');
        }
    }
);

试试这个Change event.preventDefault();

$("input[type='submit'][name='next']").click(
    function(event) {
        if (al != 3) {
            alert (al+': Not OK');
            event.preventDefault();
        } else {
            alert ('OK');
        }
    }
);

我最近需要使用.off()代替.preventDefault() 我需要拦截并阻止一个事件处理程序,同时仍然允许主click事件冒泡。 可能是您所需要的。

除了这个问题,我将建议您将验证部分e分开。 G

添加另一个表单输入,例如proceed

<input type="hidden" name="proceed" value="0"/>
<input type="submit" name="next" value="go"/>

添加自定义验证方法

jQuery.validator.addMethod("validateSteps", function(value, element) {
                return value == 3 ? false : true;
            }, "*");

向表单添加验证规则

$("#your_form_id").validate({
      rules: {          
          "proceed": {
              validateSteps: true
          }
      },
      messages: {
          "proceed": {
              validateSteps: "custom message"
          }
      }
  });

您必须设置适当的值才能proceed输入字段。 这样,您无需费心处理事件问题。 而且它更具可定制性,例如,如果您有十个步骤,每个步骤的验证要求不同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM