Reputation: 189
I am having trouble integrating php into jQuery. I am trying to enter in these three lines into a jQuery script.
PHP script (1)
$jquery=NULL;
$h=1;
for($i=1;$i<=3;$i++){
$jquery .= '
$("#Line'.$h.'Ball'.$i.'").val(texts['.($i-1).']);';
}
This code generates text:
$("#Line1Ball1").val(texts[0]);
$("#Line1Ball2").val(texts[1]);
$("#Line1Ball3").val(texts[2]);
jQuery Script
<?php echo '
<script type="text/javascript">
$(document).ready(function(){
var limit = 3;
$("div.SelectionAreaNumbersOne").on("click", "div", function(e){
e.preventDefault();
if($("div.SelectionAreaNumbersOne .selectednumber").length >= limit) {
if($("div.SelectionAreaNumbersOne .selectednumber").length == limit) {
var texts= $("div.SelectionAreaNumbersOne .selectednumber").map(function() { return $(this).text(); }).get();
'.$jquery.'
}
if($(this).hasClass("selectednumber")) { $(this).toggleClass("selectednumber"); }
}else{
$(this).toggleClass("selectednumber");
}
});
});
</script>';
?>
However typing out the lines manually in PHP does. Rather than creating the lines dynamically.
PHP script (2), that does work.
$jquery = '
$("#Line1Ball1").val(texts[0]);
$("#Line1Ball2").val(texts[1]);
$("#Line1Ball3").val(texts[2]);
';
What am I doing wrong?
echo PHP 1
<script type="text/javascript">
$(document).ready(function(){
var limit = 3;
$("div.SelectionAreaNumbersOne").on("click", "div", function(e){
e.preventDefault();
if($("div.SelectionAreaNumbersOne .selectednumber").length >= limit) {
if($("div.SelectionAreaNumbersOne .selectednumber").length == limit) {
var texts= $("div.SelectionAreaNumbersOne .selectednumber").map(function() { return $(this).text(); }).get();
$("#Line1Ball1").val(texts[0]);
$("#Line1Ball2").val(texts[1]);
$("#Line1Ball3").val(texts[2]);
}
if($(this).hasClass("selectednumber")) { $(this).toggleClass("selectednumber"); }
}else{
$(this).toggleClass("selectednumber");
}
});
echo PHP 2
<script type="text/javascript">
$(document).ready(function(){
var limit = 3;
$("div.SelectionAreaNumbersOne").on("click", "div", function(e){
e.preventDefault();
if($("div.SelectionAreaNumbersOne .selectednumber").length >= limit) {
if($("div.SelectionAreaNumbersOne .selectednumber").length == limit) {
var texts= $("div.SelectionAreaNumbersOne .selectednumber").map(function() { return $(this).text(); }).get();
$("#Line1Ball1").val(texts[0]);
$("#Line1Ball2").val(texts[1]);
$("#Line1Ball3").val(texts[2]);
}
if($(this).hasClass("selectednumber")) { $(this).toggleClass("selectednumber"); }
}else{
$(this).toggleClass("selectednumber");
}
});
Here are my code scripts:
PHP1 (not working) Pastebin code https://pastebin.com/h3h3RzHc
PHP2 (does work) Pastebin code https://pastebin.com/fbZwAmJW
Upvotes: 0
Views: 81
Reputation: 5060
As I said in my comment, removing all repetitions, the code works.
The biggest intervent was to remove from your loop the jQuery functions creating only one function that works with every SelectionAreaNumbers
div in your page.
I changed your PHP loop
$jquery=NULL;
$h=1;
for($i=1;$i<=3;$i++){
$jquery .= '
$("#Line'.$h.'Ball'.$i.'").val(texts['.($i-1).']);';
}
with a jQuery ones:
var texts = $(".selectednumber", $thisArea).map(function () {
return $(this).text();
}).get();
$.each(texts, function (i, val) {
$("input[id$='Ball" + (i + 1) + "']", $thisArea).val(val);
})
This is the jQuery script (I tried to change as little as possible from yours):
$(document).ready(function () {
var limit = <?php echo $CompanyStarterSettings['DrawNumberofBalls']; ?>;
$(".SelectionAreaNumbers").on("click", "div", function (e) {
e.preventDefault();
var $this = $(this);
var $thisArea = $(this).closest(".SelectionAreaNumbers");
if ($(".selectednumber", $thisArea).length >= limit) {
if ($this.hasClass("selectednumber")) {
$this.toggleClass("selectednumber");
}
} else {
$this.toggleClass("selectednumber");
}
if ($(".selectednumber", $thisArea).length == limit) {
var texts = $(".selectednumber", $thisArea).map(function () {
return $(this).text();
}).get();
$.each(texts, function (i, val) {
$("input[id$='Ball" + (i + 1) + "']", $thisArea).val(val);
})
}
});
});
In PHP, I removed only your ID (except those in your input, don't worry ;-) ).
This is all your file with php code:
<!DOCTYPE html>
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<META NAME="description" CONTENT="">
<META NAME="viewport" CONTENT="width=device-width, initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<style>
.NumberSelecton { background:#fff; position:relative; top: 39%; left:20%; width:292px; }
.NumberTicketsContainer { position: absolute; top: 38%; left:2%; width:49%; }
.NumberTicketsContainer P { margin:0; text-align: center; font-size: large; letter-spacing:-1px; }
.NumberTicketsContainer strong { font-weight:normal; }
.NumberSelectonContainer { position:relative; width:100%; }
.NumberSelectonContainer .TextArea { position:absolute; top:10px; left:0px; width:100px; }
.NumberSelectonContainer .SelectionArea { position:relative; }
.NumberSelectonContainer .SelectionArea .SelectionAreaNumbers { text-align:center; border: 1px solid #222; }
.NumberSelectonContainer .SelectionArea .SelectionAreaNumbers .GridNumber { display: inline-block; text-align: center; width:27px; height:48px; line-height: 47px; font-weight: 900; cursor: pointer; border: 1px solid #222; }
.NumberSelectonContainer .SelectionArea .SelectionAreaNumbers .selectednumber { background:#222; color:#fff; }
</style>
</head>
<body>
<div id="Background">
<h3>This Script works</h3>
<?php
function ConvertNumbertoWord($NumbertoWord) {
switch($NumbertoWord){
CASE 1: $NumbertoWord="One"; break;
CASE 2: $NumbertoWord="Two"; break;
CASE 3: $NumbertoWord="Three"; break;
CASE 4: $NumbertoWord="Four"; break;
CASE 5: $NumbertoWord="Five"; break;
CASE 6: $NumbertoWord="Six"; break;
CASE 7: $NumbertoWord="Seven"; break;
CASE 8: $NumbertoWord="Eigth"; break;
CASE 9: $NumbertoWord="Nine"; break;
CASE 10: $NumbertoWord="Ten"; break;
CASE 11: $NumbertoWord="Eleven"; break;
CASE 12: $NumbertoWord="Twelve"; break;
CASE 13: $NumbertoWord="Thirteen"; break;
CASE 14: $NumbertoWord="Fourteen"; break;
CASE 15: $NumbertoWord="Fifteen"; break;
}
return $NumbertoWord;
}
echo '
<div id="NextDrawCountDown"></div>
<form name="" id="" method="POST" action="" onSubmit="return validateFields()">';
$DisplayMaximumTickets = 3;
$CompanyStarterSettings['DrawNumberofBalls'] = 3;
$CompanyStarterSettings['DrawBallStartNumber'] = 1;
$CompanyStarterSettings['DrawBallFinishNumber'] = 40;
$NoTickets = 3;
$FirstConvertNumbertoWord = 'One';
$SecondConvertNumbertoWord = 'Two';
$ThirdConvertNumbertoWord = 'Three';
$SelectedTicketsOption[$NoTickets] = 'checked';
for($h=1;$h<=$DisplayMaximumTickets;$h++){
$TicketOption_Group = 'TicketOptionGroup1';
echo '
<div class="TicketContainer">
<div class="Header">
<div class="headerone"></div>
<div class="headertwo"></div>
</div>
<div class="NumberTicketsContainer">';
echo '
</div>
<div class="NumberSelecton">
<div class="NumberSelectonContainer">
<div class="SelectionArea">
<div class="SelectionAreaNumbers">';
for($j=$CompanyStarterSettings['DrawBallStartNumber'];$j<=$CompanyStarterSettings['DrawBallFinishNumber'];$j++){
echo '<div class="GridNumber" >'.$j.'</div>';
}
for($i=1;$i<=$CompanyStarterSettings['DrawNumberofBalls'];$i++){
echo '<input type="text" name="LineNumbers[]" id="Line'.$h.'Ball'.$i.'" class="test" style="width:50px;" />';
}
echo '
</div> <!-- Endof SelectionAreaNumbers -->
</div> <!-- Endof SelectionArea -->
</div> <!-- Endof NumberSelectonContainer -->
</div> <!-- Endof NumberSelecton-->
<div class="WinnerDetailsContainer">
<div class="WinnersAdvancePlay">
<div class="Footer">
</div>
</div> <!-- Endof WinnersAdvancePlay -->
</div> <!-- Endof WinnerDetailsContainer -->
</div> <!-- Endof Class TicketContainer -->';
}
echo '
<div id="SubmitTickets">
<p class="right"><input type="submit" name="SubmitTicketButton" id="SubmitTicketButton" class="SubmitTicketButton" value="Button" /></p>
</div> <!-- Endof SubmitTickets -->
</form>';
?>
<script type="text/javascript">
$(document).ready(function(){
var limit = <?php echo $CompanyStarterSettings['DrawNumberofBalls']; ?>;
$(".SelectionAreaNumbers").on("click", "div", function(e){
e.preventDefault();
var $this = $(this);
var $thisArea =$(this).closest(".SelectionAreaNumbers");
if($(".selectednumber", $thisArea).length >= limit) {
if($this.hasClass("selectednumber")) { $this.toggleClass("selectednumber"); }
}else{
$this.toggleClass("selectednumber");
}
if($(".selectednumber", $thisArea).length == limit) {
var texts= $(".selectednumber", $thisArea).map(function() { return $(this).text(); }).get();
$.each(texts, function( i, val ) {
$("input[id$='Ball"+(i+1)+"']", $thisArea).val(val);
})
}
});
});
</script>
</div>
</body>
</html>
Finally, I put here a compiled version so you can see it works.
$(document).ready(function () {
var limit = 3;
$(".SelectionAreaNumbers").on("click", "div", function (e) {
e.preventDefault();
var $this = $(this);
var $thisArea = $(this).closest(".SelectionAreaNumbers");
if ($(".selectednumber", $thisArea).length >= limit) {
if ($this.hasClass("selectednumber")) {
$this.toggleClass("selectednumber");
}
} else {
$this.toggleClass("selectednumber");
}
if ($(".selectednumber", $thisArea).length == limit) {
var texts = $(".selectednumber", $thisArea).map(function () {
return $(this).text();
}).get();
$.each(texts, function (i, val) {
$("input[id$='Ball" + (i + 1) + "']", $thisArea).val(val);
})
}
});
});
.NumberSelecton {
background: #fff;
position: relative;
top: 39%;
left: 20%;
width: 292px;
}
.NumberTicketsContainer {
position: absolute;
top: 38%;
left: 2%;
width: 49%;
}
.NumberTicketsContainer P {
margin: 0;
text-align: center;
font-size: large;
letter-spacing: -1px;
}
.NumberTicketsContainer strong {
font-weight: normal;
}
.NumberSelectonContainer {
position: relative;
width: 100%;
}
.NumberSelectonContainer .TextArea {
position: absolute;
top: 10px;
left: 0px;
width: 100px;
}
.NumberSelectonContainer .SelectionArea {
position: relative;
}
.NumberSelectonContainer .SelectionArea .SelectionAreaNumbers {
text-align: center;
border: 1px solid #222;
}
.NumberSelectonContainer .SelectionArea .SelectionAreaNumbers .GridNumber {
display: inline-block;
text-align: center;
width: 27px;
height: 48px;
line-height: 47px;
font-weight: 900;
cursor: pointer;
border: 1px solid #222;
}
.NumberSelectonContainer .SelectionArea .SelectionAreaNumbers .selectednumber {
background: #222;
color: #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="Background">
<h3>This Script works</h3>
<div id="NextDrawCountDown"></div>
<form name="" id="" method="POST" action="" onSubmit="return validateFields()">
<div class="TicketContainer">
<div class="Header">
<div class="headerone"></div>
<div class="headertwo"></div>
</div>
<div class="NumberTicketsContainer"> </div>
<div class="NumberSelecton">
<div class="NumberSelectonContainer">
<div class="SelectionArea">
<div class="SelectionAreaNumbers">
<div class="GridNumber" >1</div>
<div class="GridNumber" >2</div>
<div class="GridNumber" >3</div>
<div class="GridNumber" >4</div>
<div class="GridNumber" >5</div>
<div class="GridNumber" >6</div>
<div class="GridNumber" >7</div>
<div class="GridNumber" >8</div>
<div class="GridNumber" >9</div>
<div class="GridNumber" >10</div>
<div class="GridNumber" >11</div>
<div class="GridNumber" >12</div>
<div class="GridNumber" >13</div>
<div class="GridNumber" >14</div>
<div class="GridNumber" >15</div>
<div class="GridNumber" >16</div>
<div class="GridNumber" >17</div>
<div class="GridNumber" >18</div>
<div class="GridNumber" >19</div>
<div class="GridNumber" >20</div>
<div class="GridNumber" >21</div>
<div class="GridNumber" >22</div>
<div class="GridNumber" >23</div>
<div class="GridNumber" >24</div>
<div class="GridNumber" >25</div>
<div class="GridNumber" >26</div>
<div class="GridNumber" >27</div>
<div class="GridNumber" >28</div>
<div class="GridNumber" >29</div>
<div class="GridNumber" >30</div>
<div class="GridNumber" >31</div>
<div class="GridNumber" >32</div>
<div class="GridNumber" >33</div>
<div class="GridNumber" >34</div>
<div class="GridNumber" >35</div>
<div class="GridNumber" >36</div>
<div class="GridNumber" >37</div>
<div class="GridNumber" >38</div>
<div class="GridNumber" >39</div>
<div class="GridNumber" >40</div>
<input type="text" name="LineNumbers[]" id="Line1Ball1" class="test" style="width:50px;" />
<input type="text" name="LineNumbers[]" id="Line1Ball2" class="test" style="width:50px;" />
<input type="text" name="LineNumbers[]" id="Line1Ball3" class="test" style="width:50px;" />
</div>
<!-- Endof SelectionAreaNumbers -->
</div>
<!-- Endof SelectionArea -->
</div>
<!-- Endof NumberSelectonContainer -->
</div>
<!-- Endof NumberSelecton-->
<div class="WinnerDetailsContainer">
<div class="WinnersAdvancePlay">
<div class="Footer"> </div>
</div>
<!-- Endof WinnersAdvancePlay -->
</div>
<!-- Endof WinnerDetailsContainer -->
</div>
<!-- Endof Class TicketContainer -->
<div class="TicketContainer">
<div class="Header">
<div class="headerone"></div>
<div class="headertwo"></div>
</div>
<div class="NumberTicketsContainer"> </div>
<div class="NumberSelecton">
<div class="NumberSelectonContainer">
<div class="SelectionArea">
<div class="SelectionAreaNumbers">
<div class="GridNumber" >1</div>
<div class="GridNumber" >2</div>
<div class="GridNumber" >3</div>
<div class="GridNumber" >4</div>
<div class="GridNumber" >5</div>
<div class="GridNumber" >6</div>
<div class="GridNumber" >7</div>
<div class="GridNumber" >8</div>
<div class="GridNumber" >9</div>
<div class="GridNumber" >10</div>
<div class="GridNumber" >11</div>
<div class="GridNumber" >12</div>
<div class="GridNumber" >13</div>
<div class="GridNumber" >14</div>
<div class="GridNumber" >15</div>
<div class="GridNumber" >16</div>
<div class="GridNumber" >17</div>
<div class="GridNumber" >18</div>
<div class="GridNumber" >19</div>
<div class="GridNumber" >20</div>
<div class="GridNumber" >21</div>
<div class="GridNumber" >22</div>
<div class="GridNumber" >23</div>
<div class="GridNumber" >24</div>
<div class="GridNumber" >25</div>
<div class="GridNumber" >26</div>
<div class="GridNumber" >27</div>
<div class="GridNumber" >28</div>
<div class="GridNumber" >29</div>
<div class="GridNumber" >30</div>
<div class="GridNumber" >31</div>
<div class="GridNumber" >32</div>
<div class="GridNumber" >33</div>
<div class="GridNumber" >34</div>
<div class="GridNumber" >35</div>
<div class="GridNumber" >36</div>
<div class="GridNumber" >37</div>
<div class="GridNumber" >38</div>
<div class="GridNumber" >39</div>
<div class="GridNumber" >40</div>
<input type="text" name="LineNumbers[]" id="Line2Ball1" class="test" style="width:50px;" />
<input type="text" name="LineNumbers[]" id="Line2Ball2" class="test" style="width:50px;" />
<input type="text" name="LineNumbers[]" id="Line2Ball3" class="test" style="width:50px;" />
</div>
<!-- Endof SelectionAreaNumbers -->
</div>
<!-- Endof SelectionArea -->
</div>
<!-- Endof NumberSelectonContainer -->
</div>
<!-- Endof NumberSelecton-->
<div class="WinnerDetailsContainer">
<div class="WinnersAdvancePlay">
<div class="Footer"> </div>
</div>
<!-- Endof WinnersAdvancePlay -->
</div>
<!-- Endof WinnerDetailsContainer -->
</div>
<!-- Endof Class TicketContainer -->
<div class="TicketContainer">
<div class="Header">
<div class="headerone"></div>
<div class="headertwo"></div>
</div>
<div class="NumberTicketsContainer"> </div>
<div class="NumberSelecton">
<div class="NumberSelectonContainer">
<div class="SelectionArea">
<div class="SelectionAreaNumbers">
<div class="GridNumber" >1</div>
<div class="GridNumber" >2</div>
<div class="GridNumber" >3</div>
<div class="GridNumber" >4</div>
<div class="GridNumber" >5</div>
<div class="GridNumber" >6</div>
<div class="GridNumber" >7</div>
<div class="GridNumber" >8</div>
<div class="GridNumber" >9</div>
<div class="GridNumber" >10</div>
<div class="GridNumber" >11</div>
<div class="GridNumber" >12</div>
<div class="GridNumber" >13</div>
<div class="GridNumber" >14</div>
<div class="GridNumber" >15</div>
<div class="GridNumber" >16</div>
<div class="GridNumber" >17</div>
<div class="GridNumber" >18</div>
<div class="GridNumber" >19</div>
<div class="GridNumber" >20</div>
<div class="GridNumber" >21</div>
<div class="GridNumber" >22</div>
<div class="GridNumber" >23</div>
<div class="GridNumber" >24</div>
<div class="GridNumber" >25</div>
<div class="GridNumber" >26</div>
<div class="GridNumber" >27</div>
<div class="GridNumber" >28</div>
<div class="GridNumber" >29</div>
<div class="GridNumber" >30</div>
<div class="GridNumber" >31</div>
<div class="GridNumber" >32</div>
<div class="GridNumber" >33</div>
<div class="GridNumber" >34</div>
<div class="GridNumber" >35</div>
<div class="GridNumber" >36</div>
<div class="GridNumber" >37</div>
<div class="GridNumber" >38</div>
<div class="GridNumber" >39</div>
<div class="GridNumber" >40</div>
<input type="text" name="LineNumbers[]" id="Line3Ball1" class="test" style="width:50px;" />
<input type="text" name="LineNumbers[]" id="Line3Ball2" class="test" style="width:50px;" />
<input type="text" name="LineNumbers[]" id="Line3Ball3" class="test" style="width:50px;" />
</div>
<!-- Endof SelectionAreaNumbers -->
</div>
<!-- Endof SelectionArea -->
</div>
<!-- Endof NumberSelectonContainer -->
</div>
<!-- Endof NumberSelecton-->
<div class="WinnerDetailsContainer">
<div class="WinnersAdvancePlay">
<div class="Footer"> </div>
</div>
<!-- Endof WinnersAdvancePlay -->
</div>
<!-- Endof WinnerDetailsContainer -->
</div>
<!-- Endof Class TicketContainer -->
<div id="SubmitTickets">
<p class="right">
<input type="submit" name="SubmitTicketButton" id="SubmitTicketButton" class="SubmitTicketButton" value="Button" />
</p>
</div>
<!-- Endof SubmitTickets -->
</form>
</div>
Maybe it is not the definitive solution for you, but I think it is a good starting point to finish your work. With this I just wanted to show you that, removing all repetitions, your code works.
Upvotes: 1
Reputation: 2052
Instead of using '.$jquery.'
you should use: <?php echo $jquery; ?>
Upvotes: 2