jQuery / trigger onload

时间:2017-07-26 15:28:06

标签: jquery

我对jQuery很新。我正在尝试使用名为mark.js的解决方案

$(function () {
    var mark = function () {
        var inputstring = "/[^a-zA-Z0-9-,-.-]/g";
        // Create regexvar flags = inputstring.replace(/.*\/([gimy]*)$/, '$1');
        var pattern = inputstring.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1');
        var regex = new RegExp(pattern, flags);
        // Determine selected optionsvar options = {};

        $("input[name='opt[]']").each(function () {
            options[$(this).val()] = $(this).is(":checked");
        });

        // Mark the regex inside the context
        $(".context").unmark({
            done: function () {
                $(".context").markRegExp(regex, options);
            }
        });
    };

    // Trigger mark action on button click
    $("button[name='mark']").on("click", mark);
});

当我点击名为'mark'的按钮时,代码基本上就会执行。我想要的,我知道这听起来很简单,因为代码可以在页面加载时执行。

这可能吗?

1 个答案:

答案 0 :(得分:0)

// Trigger mark action on button click
$("button[name='mark']").on("click", mark);
});

mark(); //will execute on page load

所以第一部分是创建一个绑定到找到的元素,当点击任何元素时将执行什么。您的问题也要求在页面加载时执行此操作。

mark();会在遇到它时立即调用它,如果你在任何函数之外,或者在页面加载时调用的函数中,它将在页面加载时执行。

其他人建议在绑定结束时使用.trigger('click')来达到相同的结果,这也是正确的。但是,这会产生更多的开销。当你使用trigger(event)时,你正在使jQuery创建一个新的Event对象,然后由触发的元素处理。

除非你有理由这样做,否则你提出的案件通常不需要这样做。您只需要在页面加载时执行该功能。没有理由通过DOM强制这种逻辑。

有些情况下这是可取的,例如,如果你正在使用的元素也可能做其他事情,有其他绑定,也应该处理。在这种情况下,可以使用触发器(事件)来调用可能绑定到元素的所有未知方法。

在评论中还提到,执行trigger()的一个用途是jQuery会自动将this变量绑定到处理事件的元素。如果您在方法中使用this,则只需调用该方法就行不通,因为在这种情况下不会定义this

但是,即使在这种情况下,您也不必通过DOM强制执行逻辑并导致jQuery开销。您也可以简单地使用call()方法。例如......

function workHorse() {
  console.log(this.name);
}

$('button').on('click', workHorse);

console.log('without context');
workHorse();
console.log('with context');
workHorse.call($('button').get(0));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button name="tester">Click Me</button>

如果需要,您可以使用call()告诉它使用哪个元素作为this。所以在任何一种情况下,通常都不需要让jQuery创建一个新事件来调用方法。

虽然在一天结束时,可能会有人认为这也是程序员的风格,所以对每个人来说都是如此。