官术网_书友最值得收藏!

Solution #3 - remove the handler

We may go for a lateral kind of solution, and instead of having the function avoid repeated clicks, we might just remove the possibility of clicking altogether:

function billTheUser(some, sales, data) {
document.getElementById("billButton").onclick = null;
window.alert("Billing the user...");
// actually bill the user
}

This solution also has some problems:

  • The code is tightly coupled to the button, so you won't be able to reuse it elsewhere
  • You must remember to reset the handler, otherwise the user won't be able to make a second buy
  • Testing will also be harder, because you'll have to provide some DOM elements

We can enhance this solution a bit, and avoid coupling the function to the button, by providing the latter's ID as an extra argument in the call. (This idea can also be applied to some of the following solutions.) The HTML part would be:

<button
id="billButton"
onclick="billTheUser('billButton', some, sales, data)"
>
Bill me
</button>;

(note the extra argument) and the called function would be:

function billTheUser(buttonId, some, sales, data) {
document.getElementById(buttonId).onclick = null;
window.alert("Billing the user...");
// actually bill the user
}

This solution is somewhat better. But, in essence, we are still using a global element: not a variable, but the onclick value. So, despite the enhancement, this isn't a very good solution either. Let's move on.

主站蜘蛛池模板: 唐海县| 尼勒克县| 楚雄市| 望奎县| 高雄市| 安庆市| 高邮市| 女性| 东源县| 兰溪市| 榆林市| 新民市| 收藏| 南平市| 陇川县| 曲松县| 宁海县| 沙田区| 梁山县| 罗甸县| 中超| 华容县| 囊谦县| 永康市| 淮阳县| 武胜县| 会宁县| 沿河| 英超| 凯里市| 思茅市| 安宁市| 西华县| 延津县| 双牌县| 年辖:市辖区| 土默特左旗| 县级市| 千阳县| 砚山县| 东至县|