相关疑难解决方法(0)

JQuery:为什么不引人注目的JavaScript /文档就绪功能而不是OnClick事件?

我刚刚开始关注JQuery.我目前在我的网络应用程序中没有任何AJAX.

我在HTML中的现有JavaScript看起来像:

<form ...>
<p>Find what? <input ...></p>
<div class="ButtonArray">
  <a href="AddRecord.ASP&amp;Action=ADD">ADD</a>
  <a href="#" onClick="return MyFormSubmit();">FIND</a>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)

这将显示[添加]和[查找]的按钮.对于Find,有必要提交表单,我使用MyFormSubmit()验证数据,为页面添加视觉效果,然后POST数据.

我可以为Find按钮添加一个CLASS或ID,在JQuery中我可以编写如下内容:

$(function() {
  $(".MySearchButtonClass").click(function() {
    // validate and process form here
  });
});
Run Code Online (Sandbox Code Playgroud)

在我与JQuery理解的"新手"阶段,我不明白为什么我会这样做

我的旧方法识别对象附近的方法.在用户按下按钮之前可能存在JS未加载的风险(在那里?JS的LOAD位于页面顶部).

在加载文档之前,JQuery Document Ready方法不会被激活(我假设JS已经存在并准备好运行了吗?),但它将代码移动到我的HTML文件的一个单独部分 - 所以当我在HTML源代码中看到了MyButtonArray DIV,对我来说哪些对象有方法,哪些对象没有方法不明显.

能否帮助我了解我的选择以及我应该注意的好处/问题?

编辑:我觉得DOM操作 - 比如点击任何带有类"LightBoxThumb"的缩略图时可以出现的LightBox - 会使用Unobtrusive Javascript.

但是,我正在努力说服自己,具有特定操作的按钮应该以这种方式应用其方法.(我当然不会在按钮上放任何代码而不是单个函数调用"其他地方"的东西,但在我看来,这是我最好的线索,关于那个按钮做什么,而不显眼的Javascript层可能会更难确定.)

Edit2 - 接受的答案

我已经接受了Russ Cams的回答.它以一种对我有所帮助的方式描述了Unobtrusive Javascript,以便更多地了解应该如何以及何时应该使用它.

目前(当我有更多经验时可能会改变!)我将坚持使用OnClick事件对一个对象进行单个,不变的动作,因为我觉得我更容易调试 - 并且如果出现问题则进行诊断.对于允许单击标题列进行排序(以及该类型的情况)的表上的ZebraStripes,我可以看到Unobtrusive Javascript方法的好处

Russ的最终评论特别有用,在此重复:

"@Kristen - 你是对的,就像许多编程主题一样,有不止一种方法,人们会强烈支持他们的信念!如果我们谈论单一按钮的单一方法,我完全理解你的位置来自......

如果我们讨论的是大量的JavaScript,同一个函数调用多个元素,不同的函数调用不同的方法,等等.我认为自己混合内联和不显眼的方法会更加困难,而且它会是更好地采用一种或另一种方法"

jquery unobtrusive-javascript document-ready

6
推荐指数
1
解决办法
6646
查看次数

更新:如何在原型中的DOM节点上查找事件侦听器?

我正在寻找这个问题的最新答案.

在Prototype 1.6+中似乎不再使用Event.observers(可能是为了避免内存泄漏),那么如何追踪哪些事件监听器附加到元素?

我知道Firebug有一个"下一个中断"按钮,但是在我可以获得我想要的另一个特定元素的行为之前,body元素上有几个鼠标侦听器,所以还有其他方法吗?

javascript events listener prototypejs observer-pattern

6
推荐指数
2
解决办法
5856
查看次数

客户端浏览器调试器:如何查看当前在元素上注册的处理程序列表?

学习现有站点的客户端代码,想要了解完全在客户端发生的一些活动.

想知道点击特定元素时调用的JS处理程序.有没有办法在某种调试器中看到这些信息?

我正在使用Firefox与Firebug或Chrome

javascript browser client-side

5
推荐指数
1
解决办法
95
查看次数

jQuery:获取对click事件的引用并在以后触发它?

我想在一些额外的代码中包装现有的click事件.

基本上我在手风琴中有一个多部分形式,我想触发手风琴标题点击的验证.手风琴代码在别处使用,我不想改变它.

这是我尝试过的:

   //Take the click events off the accordion elements and wrap them to trigger validation
    $('.accordion h1').each(function (index, value) {
        var currentAccordion = $(value);
        //Get reference to original click
        var originalClick = currentAccordion.click;

        //unbind original click
        currentAccordion.unbind('click');

        //bind new event           
        currentAccordion.click(function () {
            //Trigger validation
            if ($('#aspnetForm').valid()) {
                current = parseInt($(this).next().find('.calculate-step').attr('data-step'));             
                //Call original click.
                originalClick();
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

jQuery抛出一个错误,因为它试图this.triggeroriginalClick函数内部做,我不认为this是jQuery期望它.

编辑:更新的代码.这有效,但有点难看!

   //Take the click events off the accordion elements and wrap them to …
Run Code Online (Sandbox Code Playgroud)

javascript jquery

5
推荐指数
1
解决办法
2万
查看次数

javascript 中的 hasEventListener

JavaScript 没有hasEventListener函数。我可以用什么来代替它?

我正在做:

someForm.addEventListener( "submit", _submitHandler, false );
Run Code Online (Sandbox Code Playgroud)

我有一个“表单控制器”,它应该测试哪些表单有提交事件的侦听器。

javascript

5
推荐指数
1
解决办法
1万
查看次数

删除事件监听器而不引用事件处理程序

我想知道是否可以在不引用应删除的事件处理函数的情况下删除事件侦听器。

Jquery$().unbind('touchmove')将不起作用,因为事件侦听器是使用 Javascript 添加的addEventListener('touchmove', handlerFunction),而不是 Jquery 的bind函数。

removeEventListener('touchmove')似乎不起作用,这与 Javascript 函数规范一致。

javascript events dom-events

5
推荐指数
1
解决办法
2306
查看次数

在Javascript中绑定到事件的函数的执行顺序

我正在搜索有关javascript中绑定到页面事件的函数执行顺序的详细信息,例如通过EventListener.

例如,如果我将三个函数A(),B()和C()绑定到同一个事件(比如DOMContentLoaded),那么这三个函数的执行顺序是什么?基于JS代码中addEventListener调用顺序的逐个?或者他们同时执行?

此外,我可以修改此订单吗?例如,要有一个绑定到DOMContentLoaded事件侦听器的函数,要在绑定到同一事件的任何其他函数之前执行.

javascript browser dom

5
推荐指数
2
解决办法
2744
查看次数

从 chrome webdriver (python) 访问 getEventListeners

目的:

从 selenium webdriver 获取附加到节点的所有事件


我正在使用 selenium-python 并且我想执行一个 javascript 脚本(通过driver.execute_script('my js script').

此脚本使用getEventListeners仅在Chrome 上可用。我成功使用

driver = webdriver.Chrome('path/to/chromedriver')
Run Code Online (Sandbox Code Playgroud)

启动 Chrome 浏览器。用getEventListeners(myNode)我执行我的脚本得到类似的东西:

文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py”,第 403 行,在 execute_script {'script': script, 'args':converted_args})['value '] 文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py”,第 175 行,在执行 self.error_handler.check_response(response) 文件“/usr/local/ lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 166, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: getEventListeners没有定义的

getEventListeners可通过命令行 API 获得,但我无法通过 selenium 使其工作。有解决方案吗?有没有其他方法可以将所有事件绑定到一个元素?(尤其是 Click 事件)

干杯

javascript python selenium google-chrome

5
推荐指数
1
解决办法
1276
查看次数

如何在文档/窗口对象上找到所有滚动侦听器?

我已经通过性能分析工具放置了我的网站,它回来说文档/窗口对象上有太多滚动侦听器.

有没有办法找到我的文档/窗口对象的所有滚动侦听器?

可能有以下几点:

window.scroll.listeners
Run Code Online (Sandbox Code Playgroud)

javascript

5
推荐指数
2
解决办法
4594
查看次数

禁用外部库设置的事件侦听器

在外部库的某个地方(当然,我无法更改),以这种方式创建了一个事件侦听器:

someElement.addEventListener('keydown', function(e) {
    whatever();
});
Run Code Online (Sandbox Code Playgroud)

我需要摆脱这个监听器或以某种方式覆盖它。但似乎无法做到,因为我没有任何方法可以引用使用的匿名函数。

这不是唯一被删除的侦听器。卸下所有keydown听众会也行,如果有可能。

我已经看到一个选项是克隆元素并替换它,但我不能这样做,因为有很多初始化,并且创建了很多其他事件侦听器。我只需要取消那个keydown

有什么我可以做的吗?

javascript

5
推荐指数
1
解决办法
472
查看次数