如何在jquery中调用onfocus事件上的函数

时间:2012-11-02 09:36:01

标签: javascript jquery

其实我的问题有所不同。

我在我的小方框中调用了表单第一个元素的.focus事件的函数,如下所示。

        $(".tbox :input:visible:enabled:first").focus(function () {
            tabIndexForm();
         });

它工作正常,但这是在我手动设置的表单的第一个元素上替换我自己的onfocus事件上调用的函数。这该怎么做。我的表格是:

 <form name="exampleform">
  <input type="text" name="a" onfocus="somefunction();"/>
  <input type="text" name="b"/>
  </form>

现在,当我打开小盒子时,tabIndexForm函数调用完美,但somefunction()不起作用,因为我认为tabIndexForm取代了这个函数。如何升级以下代码以兼顾两者。

         $(".tbox :input:visible:enabled:first").focus(function () {
            tabIndexForm();
         });

重要提示:我不能在tinybox.js中调用“somefunction()”,因为这对所有小盒子来说都很常见。

3 个答案:

答案 0 :(得分:2)

'focus'函数/将事件处理程序绑定到元素。

尝试新的'on'函数,/添加/一个事件处理程序。

$(".tbox :input:visible:enabled:first").on('focus', function () {
        tabIndexForm();
});

编辑首次尝试无效。

这应该会更好:

$(".tbox").on('focus', ":input:visible:enabled:first", function () {
        tabIndexForm();
});

这样,事件处理程序没有附加到元素,因此它不会覆盖旧元素。

答案 1 :(得分:1)

这应该有效:

var elem = $(".tbox :input:visible:enabled:first");
var oldFunc = elem[0].onfocus;
elem.focus(function () {
    if(typeof oldFunc == 'function') oldFunc.call(elem[0]);
    tabIndexForm();
});

选中演示http://jsfiddle.net/8JbvY/

答案 2 :(得分:1)

从元素中删除onfocus属性:

<form name="exampleform">
  <input type="text" name="a"/>
  <input type="text" name="b"/>
</form>

将您的javascript更改为:

$(".tbox input[name='a']").focus(somefunction);

$(".tbox :input:visible:enabled:first").focus(function () {
     tabIndexForm();
});

这也是处理事件处理程序的一种更简洁的方法,因为您将逻辑保存在一个位置。