Here is my code:
$("#one_to_many").on("click", function(){
$( this ).html('<form action="demo_form.asp">\
<input type="checkbox" name="graph" value="like"> کامنت ها<br>\
<input type="checkbox" name="graph" value="comment" checked> لایک ها<br>\
<input type="checkbox" name="graph" value="friend" checked> دوستان<br>\
<input type="button" value="رسم گراف">\
</form>');
});
div{
border:1px solid;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="one_to_many">click</div>
As you see I cannot trigger those checkbox. In other word, I cannot mark a checkbox option as selected or deselect it.
How can I make it available?
By a adding an onClick function for the child modal (content div) mouse click events are prevented to reach the 'closeLogin' function of the parent element.
The preventDefault() method cancels the event if it is cancelable, meaning that the default action that belongs to the event will not occur. For example, this can be useful when: Clicking on a "Submit" button, prevent it from submitting a form. Clicking on a link, prevent the link from following the URL.
There are a couple of ways:
One is to remove the click handler once you've populated the div with the checkboxes:
$("#one_to_many").on("click", function(){
// ------vvvvvvvvvvvvv
$( this ).off("click").html('<form action="demo_form.asp">\
<input type="checkbox" name="graph" value="like"> کامنت ها<br>\
<input type="checkbox" name="graph" value="comment" checked> لایک ها<br>\
<input type="checkbox" name="graph" value="friend" checked> دوستان<br>\
<input type="button" value="رسم گراف">\
</form>');
});
div{
border:1px solid;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="one_to_many">click</div>
(Or as vp_arth points out, just use one
to hook it up instead of on
— I tend to forget about one
!)
Another is to check the event.target
within the click handler and ignore the event if it's a checkbox:
$("#one_to_many").on("click", function(event){ // ***
if ($(event.target).is("input[type=checkbox]")) {
return;
}
$( this ).html('<form action="demo_form.asp">\
<input type="checkbox" name="graph" value="like"> کامنت ها<br>\
<input type="checkbox" name="graph" value="comment" checked> لایک ها<br>\
<input type="checkbox" name="graph" value="friend" checked> دوستان<br>\
<input type="button" value="رسم گراف">\
</form>');
});
div{
border:1px solid;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="one_to_many">click</div>
...but if you use label
elements (you aren't, but I'd recommend it) that could get tricky. You could only process the click if event.target
is the div
:
(I've added label
s to this to illustrate.)
$("#one_to_many").on("click", function(event){ // ***
if (event.target != this) {
return;
}
$( this ).html('<form action="demo_form.asp">\
<label><input type="checkbox" name="graph" value="like"> کامنت ها</label><br>\
<label><input type="checkbox" name="graph" value="comment" checked> لایک ها</label><br>\
<label><input type="checkbox" name="graph" value="friend" checked> دوستان</label><br>\
<input type="button" value="رسم گراف">\
</form>');
});
div{
border:1px solid;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="one_to_many">click</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With