我对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'的按钮时,代码基本上就会执行。我想要的,我知道这听起来很简单,因为代码可以在页面加载时执行。
这可能吗?
答案 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创建一个新事件来调用方法。
虽然在一天结束时,可能会有人认为这也是程序员的风格,所以对每个人来说都是如此。