jQuery:event.preventdefault();

时间:2013-11-07 11:47:56

标签: javascript jquery html yii

如果我自己创建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不是问题,sublime(我的编辑)无论如何纠正它。

-----我想简化问题---------

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

查看

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

JS

checkDetails() {
    PREVENT_SUBMITTING
}

PREVENT_SUBMITTING应该怎么样?在这种情况下,什么会阻止提交,没有任何条件?

7 个答案:

答案 0 :(得分:2)

更改

event.preventdefault();

event.preventDefault();

你必须把“D”写成大写字母。

答案 1 :(得分:1)

你可以这两种方式

$("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;
        }
    }
);

答案 2 :(得分:1)

现在我有了一个有效的解决方案:

查看

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;
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

尝试此更改event.preventDefault();

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

添加其他表单输入,例如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输入字段设置正确的值。这样您就不需要涉及事件问题了。而且它更具可定制性,例如,如果您在每个步骤中有十个步骤具有不同的验证要求