JavaScript函数运行两次?

时间:2017-04-20 07:53:04

标签: javascript html asp.net-mvc function events

我有点困惑。

我有一个用户可以单击的复选框,用于确定我的页面上的私人电话号码是对所有人还是仅对管理员可见。当单击该框时,我想确保您首先被允许首先打印它的状态仅用于测试目的。当我运行此功能时,它会运行两次。

我在其他地方读到这是因为Callbacks?但我回复假,所以这不应该是这样的吗?

我不是一个JavaScript向导,所以我仍然不了解JavaScript及其与ASP的交互。

/**
* Used to Check whether a Private Phone number should be hidden or shown.
*/
function ValidateHidePrivate() {
    if (scope["pickeduser"] != scope["credential"]) {
        alert("Not allowed");
        return false;
    } else {
        alert(document.getElementById("HidePrivate").checked);
        return false;
    }
}

HTML:

<label for="HidePrivate" onclick="ValidateHidePrivate()">
    <input type="checkbox" name="HidePrivate" id="HidePrivate" value="no" />
    Hide my Private Phone Number
</label>

任何帮助?

3 个答案:

答案 0 :(得分:6)

这是因为带有<label>属性的for会引发与click元素相关联的<input type="checkbox">事件。

您应该将click事件处理程序绑定到input,而不是绑定到label

&#13;
&#13;
function ValidateHidePrivate() {
      alert();
}
&#13;
<label for="HidePrivate" >
    <input type="checkbox" name="HidePrivate" onclick="ValidateHidePrivate()" id="HidePrivate" value="no" />
    Hide my Private Phone Number
</label>
&#13;
&#13;
&#13;

答案 1 :(得分:3)

当您点击标签时,可能是复选框上还有活动点击运行吗? 尝试在您的函数中添加event.stopPropagation()

答案 2 :(得分:1)

仅在catch (Exception e) { string message = "create id error"; message += e.Message; return message; } 上添加onclick事件处理程序。此外,input嵌套在标签内。

希望此代码段有用

<强> HTML

input

<强> JS

<input type="checkbox" name="HidePrivate" id="HidePrivate" value="no" onclick="ValidateHidePrivate()" />

<label for="HidePrivate">
  Hide my Private Phone Number
</label>

DEMO