Как можно повторить этот jQuery в PHP

echo "<form class='noPrint' action='demo/saveToExcel.php' method='post' target='_blank'
       onsubmit='$('#datatodisplay').val( $('<div>').append( $('#dataTable').eq(0).clone() ).html() )'>
       <pre><input id='excel' type='image' src='img/file.png'></pre>
       <p id='save'>Save table data to Excel</p>
       <pre><input type='hidden' id='datatodisplay' name='datatodisplay' />
       </form>
       <input class='noPrint' type='button' id='print' value='Print' />";

Когда я запускаю страницу, я не получаю ошибку синтаксического анализа, однако ').append( $('#dataTable').eq(0).clone() ).html() )'> действительно отображается на странице, поэтому jQuery не работает!

Как я могу правильно включить его в эхо?

Спасибо


person benhowdle89    schedule 24.01.2011    source источник


Ответы (9)


Почему бы вообще не пропустить echo вот так:

 //your PHP code before this echo statement

 //let us say this is part of a IF statement

 if(true)
 {
 ?>

 <form class='noPrint' action='demo/saveToExcel.php' method='post' target='_blank'
   onsubmit="$('#datatodisplay').val( $('<div>').append( $('#dataTable').eq(0).clone() ).html() )">
   <pre><input id='excel' type='image' src='img/file.png'></pre>
   <p id='save'>Save table data to Excel</p>
   <pre><input type='hidden' id='datatodisplay' name='datatodisplay' />
   </form>
   <input class='noPrint' type='button' id='print' value='Print' />

 <?php

 } //if ends here
 // continue with your PHP code

EDIT: у вас также есть неправильно вложенные символы кавычек в onsubmit. Приведенный выше код ТАКЖЕ исправляет это, преобразовывая эти кавычки в двойные кавычки.

Вы также можете использовать эхо и экранировать эти кавычки следующим образом:

  echo "<form class='noPrint' action='demo/saveToExcel.php' method='post' target='_blank'
   onsubmit=\"$('#datatodisplay').val( $('<div>').append( $('#dataTable').eq(0).clone() ).html() )\">
   <pre><input id='excel' type='image' src='img/file.png'></pre>
   <p id='save'>Save table data to Excel</p>
   <pre><input type='hidden' id='datatodisplay' name='datatodisplay' />
   </form>
   <input class='noPrint' type='button' id='print' value='Print' />";
person shamittomar    schedule 24.01.2011
comment
Я просто был обеспокоен тем, что код является частью оператора if, поэтому я хотел, чтобы он был включен в этот - person benhowdle89; 24.01.2011
comment
Это не устраняет проблему, связанную с неправильной вложенностью символов кавычек. - person Quentin; 24.01.2011
comment
@benhowdle89: вы можете сделать это и с помощью оператора if. Проверьте обновленный ответ. - person shamittomar; 24.01.2011
comment
@ Дэвид Дорвард: Хорошо. Я исправил это сейчас. - person shamittomar; 24.01.2011

У вас есть

onsubmit='$('

Одинарные кавычки внутри значений атрибутов, разделенных одинарными кавычками, должны быть представлены как &#39;, чтобы они обрабатывались как данные, а не другой конец значения атрибута.

Кроме того, и отдайте должное Knittl, строки с разделителями в двойных кавычках в PHP-переменных интерполируются. Поэтому вам нужно избегать знаков $ для PHP.

Это также было бы лучше написать, используя:

  • Unobtrusive JavaScript
    • Thus keeping the JS in a separate file and not having to worry about nested quotes
  • A block of HTML instead of an echo statement (conditionals wrapped around it still apply)
    • Letting you avoid having three levels of quotes (PHP, HTML, JavaScript)
    • Не беспокойтесь об интерполяции переменных в PHP
person Quentin    schedule 24.01.2011
comment
Хотя это может быть не лучший способ, он может использовать двойные кавычки внутри атрибута onsubmit и экранировать их. Лучший - - person OV Web Solutions; 24.01.2011

С такой переменной концепция heredoc была бы очень полезной.

$variable = <<<XYZ
........
........
XYZ;
person Nabab    schedule 24.01.2011

Добавьте знак @ перед такой строкой

echo @" and now you can have multiple lines

надеюсь, это поможет

person Senad Meškin    schedule 24.01.2011
comment
это PHP, а не .NET. @ подавляет ошибки в PHP и полностью отличается от «не интерпретировать специальные символы» в .NET. - person knittl; 24.01.2011
comment
япончик я понял, не сердись - person Senad Meškin; 24.01.2011

Вы не должны использовать эхо для этого, вы можете просто безопасно остановить PHP на секунду. Ошибка, похоже, в HTML, как таковая:

onsubmit='$('#datatodisplay').

HTML считает, что onsubmit — это всего лишь $(, вместо этого вы должны использовать ".

person TJHeuvel    schedule 24.01.2011

есть несколько вопросов…

php заменяет переменные в строках с двойными кавычками ("$var") их значением.

вам нужно либо использовать одинарные кавычки и избегать других одинарных кавычек, либо использовать heredoc:

echo <<<EOT
       <form class="noPrint" action="demo/saveToExcel.php" method="post" target="_blank"
       onsubmit="$('#datatodisplay').val( $('<div>').append( $('#dataTable').eq(0).clone() ).html() )">
       <pre><input id="excel" type="image" src="img/file.png"></pre>
       <p id="save">Save table data to Excel</p>
       <pre><input type="hidden" id="datatodisplay" name="datatodisplay" />
       </form>
       <input class="noPrint" type="button" id="print" value="Print" />
EOT;

вы также можете вывести свой html напрямую, без php

// suspend php script
?>
<form class="noPrint" action="demo/saveToExcel.php" method="post" target="_blank"
  onsubmit="$('#datatodisplay').val( $('<div>').append( $('#dataTable').eq(0).clone() ).html() )">
<pre><input id="excel" type="image" src="img/file.png"></pre>
<p id="save">Save table data to Excel</p>
<pre><input type="hidden" id="datatodisplay" name="datatodisplay" />
</form>
<input class="noPrint" type="button" id="print" value="Print" />
<?php // resume php script

кроме того, обработчики событий javascript не должны быть объявлены встроенными. используйте javascript для создания и применения их к элементам DOM

person knittl    schedule 24.01.2011

попробуй это

echo "<form class='noPrint' action='demo/saveToExcel.php' method='post' target='_blank'
       onsubmit='$(\"#datatodisplay\").val( $(\"<div>\").append( $(\"#dataTable\").eq(0).clone() ).html() )'>
       <pre><input id='excel' type='image' src='img/file.png'></pre>
       <p id='save'>Save table data to Excel</p>
       <pre><input type='hidden' id='datatodisplay' name='datatodisplay' />
       </form>
       <input class='noPrint' type='button' id='print' value='Print' />";

у вас есть '$('#datatodisplay'). html, который анализирует это как '$(', затем берет первый >, который находится в <div>, и печатает все, что после.

person Rami Dabain    schedule 24.01.2011

echo "<form class='noPrint' action='demo/saveToExcel.php' method='post' target='_blank'";
echo "onsubmit='\$(\'#datatodisplay\').val(\$(\'<div>\').append(\$(\'#dataTable\').eq(0).clone() ).html() )'>";
echo "<pre><input id='excel' type='image' src='img/file.png'></pre>";
echo "<p id='save'>Save table data to Excel</p>";
echo "<pre><input type='hidden' id='datatodisplay' name='datatodisplay' />";
echo "</form>";
echo "<input class='noPrint' type='button' id='print' value='Print' />";

попробуй это! ;) вам нужно экранировать $ с помощью \ и не должно быть \n (новая строка в ответе), поэтому несколько эхо-сигналов или вы можете все поместить в переменную, а затем повторить ее в конце!

person DoubleZero    schedule 24.01.2011

Извините, это правильный ответ, лол

echo "<form class='noPrint' action='demo/saveToExcel.php' method='post' target='_blank'
   onsubmit=\"$('#datatodisplay').val( $('<div>').append( $('#dataTable').eq(0).clone() ).html() )\">
   <pre><input id='excel' type='image' src='img/file.png'></pre>
   <p id='save'>Save table data to Excel</p>
   <pre><input type='hidden' id='datatodisplay' name='datatodisplay' />
   </form>
   <input class='noPrint' type='button' id='print' value='Print' />";

Почему ты такая злая. хехе :)

person Senad Meškin    schedule 24.01.2011