2017-04-20 23 views
7

私は少し混乱しています。JavaScript関数が2回実行されていますか?

ユーザーがクリックできるチェックボックスがあり、ページのプライベート電話番号を全員に表示するか、管理者にのみ表示するかを決定します。ボックスがクリックされると、テスト目的のためだけにその状態を表示することができます。この機能を実行すると、2回実行されます。

私はコールバックのために他の場所を読みましたか?しかし、私はFalseを返すので、これは正しい場合ではないでしょうか?

私は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> 

任意のヘルプ?

+1

ラベルが付いたチェックボックス? – Tushar

+1

@タシャー私は間違って質問を早すぎて投稿しました。はい、ラベル付きです。ちょうどその部分を追加しました。 – OmniOwl

答えて

6

有用であろう

・ホープfor属性を持つは、クリックしたときに関連付けられた<input type="checkbox">という要素のclickイベントを発生させます。

clickイベントハンドラをinputにバインドし、labelにバインドする必要があります。

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

+1

これは正しい解決策です。ありがとうございました! – OmniOwl

2

ラベルをクリックすると、チェックボックスでもイベントのクリックが実行されることがありますか? event.stopPropagation()をあなたの機能の中に入れてみてください。

+0

これを追加してもまだ2回実行されています。 – OmniOwl

1

onclickイベントハンドラをinputにだけ追加してください。 inputもラベルの内側にネストされています。このスニペットは、それが原因でです

HTML

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

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

JS

function ValidateHidePrivate() { 
    // rest of code 
} 

DEMO

+0

これを行うとレイアウトが壊れます。http://puu.sh/vqb2a/b973a5d057.png – OmniOwl

関連する問題