2

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

这是一个例子:

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

HTML

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

带有 jQ​​uery 的 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 不是问题,崇高(我的编辑)无论如何都会纠正它。

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

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

看法

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

JS

checkDetails() {
    PREVENT_SUBMITTING
}

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

4

7 回答 7

2

改变

event.preventdefault();

event.preventDefault();

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

于 2013-11-07T11:50:09.707 回答
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;
        }
    }
);
于 2013-11-07T11:50:38.800 回答
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;
}
于 2013-11-08T07:20:21.093 回答
0

除了这个问题,我建议你将验证部分 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您必须先为输入字段设置适当的值。这样您就无需费力地处理事件问题。而且它更可定制,例如,如果您有十个步骤,每个步骤都有不同的验证要求

于 2013-11-08T06:27:00.177 回答
0

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

于 2013-11-08T03:28:17.653 回答
0
$("input[type='submit'][name='next']").click(
    function(event) {
        if (al != 3) {
            alert (al+': Not OK');
            event.preventDefault();
        } else {
            alert ('OK');
        }
    }
);
于 2013-11-07T11:49:02.340 回答
0

试试这个改变event.preventDefault();

$("input[type='submit'][name='next']").click(
    function(event) {
        if (al != 3) {
            alert (al+': Not OK');
            event.preventDefault();
        } else {
            alert ('OK');
        }
    }
);
于 2013-11-07T11:49:04.760 回答