【问题标题】:override existing onkeydown embedded in html element覆盖嵌入在 html 元素中的现有 onkeydown
【发布时间】:2015-09-23 04:43:21
【问题描述】:

在 html 元素中调用 onkeydown 函数。:

""

但我需要用我的 document.onkeydown 函数覆盖它

    document.addEventListener('keydown', captureEnter, true);

    function captureEnter(evt) {

        evt = evt || window.event;
        if (evt) {
            ele_type = evt.srcElement.getAttribute("id");
            if (!(ele_type == $("[id$='AddNewLink']") || ele_type == $("[id$='Add_New']") || ele_type == $("[id$='AddNewImage']"))) {
                ele_type = null;
                return;
            }

        }

    };

如何使我的函数运行而不是执行嵌入的 html onkeydown?

【问题讨论】:

    标签: javascript overriding onkeydown


    【解决方案1】:

    如果您不想执行 onkeydown 处理程序,我认为您可以停止事件的传播

    document.addEventListener('keydown', captureEnter, true);
    
    function captureEnter(evt) {
      snippet.log('captureEnter')
      evt.stopPropagation()
    };
    
    function RadWindowprompt_detectenter() {
      snippet.log('RadWindowprompt_detectenter')
    }
    <!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
    <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
    
    <input title="Enter Value" onkeydown="return RadWindowprompt_detectenter('{0}', event, this);" type="text" class="rwDialogInput" value="{2}"/>

    另一种方法可能是删除 onkeydown 处理程序,如

    document.addEventListener('keydown', captureEnter, true);
    
    function captureEnter(evt) {
      snippet.log('captureEnter')
    };
    
    
    var els = document.querySelectorAll('input.rwDialogInput[onkeydown]');
    for (var i = 0; i < els.length; i++) {
      els[i].removeAttribute('onkeydown');
    }
    
    function RadWindowprompt_detectenter() {
      snippet.log('RadWindowprompt_detectenter')
    }
    <!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
    <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
    
    <input title="Enter Value" onkeydown="return RadWindowprompt_detectenter('{0}', event, this);" type="text" class="rwDialogInput" value="{2}" />

    【讨论】:

    • 上述代码的问题: 1. evt.stopPropagation() 永远不会被执行,因为它第一次调用:onkeydown="return RadWindowprompt_detectenter('{0}', event, this);"自从它嵌入。 2. 删除属性不起作用,因为如果 onkeydown 已经调用,删除属性没有意义!问题是 RadWindowprompt_detectenter 是从第 3 方 dll (RadContol) 调用的,因此我无法更改/删除嵌入在元素中的 onkeydown
    • @user1463110 您是否尝试过这些解决方案? - 该属性在页面加载时被删除...
    • evt.stopPropagation() 是这里的重要部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2012-11-11
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多