2017-01-26 5 views
1

Я использую солярий solr для многоязычного корпуса. Все работает так, как ожидалось, в отношении поиска информации на каждом языке. В следующем коде у меня есть два скрытых элемента ввода, в которых я передаю две переменные php, а затем я пытаюсь опубликовать значения этих элементов в javascript-функции, чтобы добавить строку в существующую таблицу и отобразить значения моих переменных в его клетках.Как передать строковую переменную PHP через скрытый элемент ввода в функцию Javascript

Мой PHP код это: ...

if ($highlightedDoc) {    
    foreach ($highlightedDoc as $field => $highlight) { 
     $hlight = implode(' (...) ', $highlight);       
     echo '<table id="lngData" text-align:left; border:none; cellpadding="02" cellspacing="02">';      
    echo '<tr><td><b>' . $counter . '</b></td><td>' . $subj_en. '</td><td>' . $hlight . '</td></tr>'; 
    echo '<tr><td>' ."" . '</td><td>' . $subj_el . '</td><td>' .$con_el. '</td></tr>'; 
    echo '<tr><td><input id="q" name="q" type="hidden" value=' . $subj_fr . '/></td></tr>'; 
    echo '<tr><td><input id="s" name="s" type="hidden" value='. $con_fr . '/></td></tr>'; 
    echo '<tr><td>' ."" . '</td><td><button onclick="showLng(q, s);">Create row</button></td><td><button onclick="myDeleteFunction()">Delete row</button></td></tr>'; 
    echo '</table>';      

    } 

Это моя функция Javascript showLng:

 function showLng(x, y) { 
     var table = document.getElementById("lngData"); 
     x = document.getElementById("q").value; 
     y = document.getElementById("s").value; 
     var row = table.insertRow(0); 
     var cell1 = row.insertCell(0); 
     var cell2 = row.insertCell(1); 
     var cell3 = row.insertCell(2); 
     cell1.innerHTML = ""; 
    cell2.innerHTML = x; 
cell3.innerHTML = y; 
} 

выше событие OnClick добавляет строку таблицы, но он обрезает результат предложение. Он выводит первое слово только для каждого предложения. Может ли кто-нибудь помочь мне в этом? Я прочитал довольно много сообщений о том, как передать переменные строки php в javascript, но ничего хорошего. Любая помощь будет принята с благодарностью. Заранее спасибо.

ответ

0

Ваш главный вопрос заключается в том, как «PASS» PHP Данные Javascript ... Я помню, это было заблуждение меня в первый, так позвольте мне объяснить, шаг за шагом:

Допустим, вы выводите Javascript с PHP, как это :

echo '<script> console.log("Hello"); </script>'; 

это будет выводить строку, которая представляет собой сценарий тег, и внутри него мы называем console.log функцию прохождения в качестве параметра строку «Hello». Все это просто строка.

Теперь давайте «Здравствуй» строку внутри переменной в PHP:

$log = 'Hello'; 

echo '<script> console.log("' . $log . '"); </script>'; 

Теперь мы «прошли» PHP данных в JavaScript. Это та же строка, что и выше.

Другой пример:

echo '<script>'; 
echo 'var hello = "";'; 
echo 'var world = "World";'; 
echo 'console.log(hello + " " + world);'; 
echo '<script>'; 

Мы хотим, чтобы заполнить hello переменную PHP.Таким образом, мы просто добавить его:

$helloString = 'Hello'; 

echo '<script>'; 
echo 'var hello = "' . echo $helloString . '";'; 
echo 'var world = "World";'; 
echo 'console.log(hello + " " + world);'; 
echo '<script>'; 

Обратите внимание, что выход PHP окружен " в Javascript, потому что несмотря на то, что мы outputing строку с PHP, если мы ommit в " так:

echo 'var hello = ' . echo $helloString . ';'; 

PHP не добавит их ни, следовательно, выход в браузере будет выглядеть следующим образом:

var hello = Hello; 

который является недействительным, оно должно быть:

var hello = "Hello"; 

Вы сделали эту ошибку в коде, в HTML:

echo '<tr><td><input id="q" name="q" type="hidden" value=' . $subj_fr . '/></td></tr>'; 

Таким образом, ваш выход будет (при условии, $subj_fr является строка "Hello World"):

<input ... value=Hello World /> 

что неправильно ,


Я заметил, что вы создаете много таблиц с одинаковыми идентификаторами (lngData), и ваши скрытые входы имеют одинаковый идентификатор тоже. Я сомневаюсь, что это задумано?

В следующем коде для каждой таблицы создается уникальный идентификатор. Я также удалил скрытые элементы, и вместо этого значения напрямую передаются в функцию showLng вместе с идентификатором таблицы. Я также изменил способ создания HTML с PHP, я сделал это только для того, чтобы показать вам по-другому (я бы сказал, что это выглядит чище) для вывода HTML с PHP вместо использования echo.

Я не знаю, является ли исправление дублированных идентификаторов ответом на ваш вопрос, но попробуйте.

if ($highlightedDoc) { 
    $i = 0; 

    foreach ($highlightedDoc as $field => $highlight) { 
     $hlight = implode(' (...) ', $highlight); 
     $tableId = 'lngData' . $i; 
?> 
    <table id="<?= $tableId ?>" style="text-align:left; border:none;" cellpadding="02" cellspacing="02"> 
     <tr><td><b><?= $counter ?></b></td><td><?= $subj_en ?></td><td><?= $hlight ?></td></tr> 
     <tr><td><?= "" ?></td><td><?= $subj_el ?></td><td><?= $con_el ?></td></tr> 
     <tr><td><!-- removed unneeded hidden input --></td></tr> 
     <tr><td><!-- removed unneeded hidden input --></td></tr> 
     <tr><td><?= "" ?></td><td><button onclick="showLng('<?= $tableId ?>', '<?= $subj_fr ?>', '<?= $con_fr ?>');">Create row</button></td><td><button onclick="myDeleteFunction()">Delete row</button></td></tr> 
    </table> 
<?php 
     $i++; 
    } 
} 

showLng функция:

function showLng(tableId, x, y) { 
    var table = document.getElementById(tableId); 
    var row = table.insertRow(0); 
    var cell1 = row.insertCell(0); 
    var cell2 = row.insertCell(1); 
    var cell3 = row.insertCell(2); 
    cell1.innerHTML = ""; 
    cell2.innerHTML = x; 
    cell3.innerHTML = y; 
} 
+0

очень чистый код, но, к сожалению, сценарий не отвечает на запросы. Никакая строка не добавляется. Есть идеи? – entropy

+0

Я только что отредактировал свой ответ, чтобы добавить ответ на ваш основной вопрос. Пример, я тестировал его, и он работает, новые строки добавляются. Конечно, мне не хватает многих переменных, которые я просто объявляю нулевыми. Проверьте наличие ошибок в консоли вашего браузера. – Parziphal

+0

Parziphal, после того как я удалил уникальный идентификатор из таблицы, и я дал ему тот же идентификатор:

entropy

Смежные вопросы