#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
У меня проблема с моим скриптом jquery, по какой-то причине две верхние кнопки отображают undefined вместо того, чтобы делать то, что делают кнопки внизу.
Кто-нибудь может сказать мне, что я сделал не так? Мне нужно, чтобы две кнопки сверху работали как кнопка внизу.
HTML:
<table class="form-table">
<tbody>
<tr>
<th scope="row">Typ</th>
<td>
<button class="IMGtoHTML" id="type_g1" name="type_g1" type="button">JPEG/PNG/GIF</button>
<button class="FLASHtoHTML" id="type_g1" name="type_g1" type="button">Flash</button>
</td>
</tr>
<tr>
<th scope="row">Code HTML</th>
<td>
<button class="IMGtoHTML" id="type_g1" name="type_g1" type="button">JPEG/PNG/GIF</button>
<button class="FLASHtoHTML" id="type_g1" name="type_g1" type="button">Flash</button>
<div class="form">
<textarea name="code_g1" id="code_g1" placeholder="" rows="5" cols="50">https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png</textarea>
</div>
</td>
</tr>
</tbody>
</table>
JS:
$(function(){
$(".IMGtoHTML").click(function() {
var url = $(this).next().next('.form').find('textarea').val();
var display_html = '<img src="' url '">';
$(this).next().next('.form').find('textarea').val(display_html);
});
});
$(function(){
$(".FLASHtoHTML").click(function() {
var url = $(this).next('.form').find('textarea').val();
var display_html = '<img src="' url '">';
$(this).next('.form').find('textarea').val(display_html);
});
});
Демонстрация здесь:https://jsfiddle.net/hd4uao12 /
Комментарии:
1. Извините, моя ошибка — должно быть так: jsfiddle.net/u6byatfk
2. Согласно вашей html-структуре $ (this).next().next(‘.form’) будет работать только для нижних кнопок. Используйте $(‘.form’).find(‘textarea’).val().
3. К сожалению, я не могу его использовать, потому что я планирую разместить на веб-сайте несколько подобных форм. Если я сделаю $ (‘.form’).find(‘textarea’).val(), то одно и то же содержимое будет отправлено во все текстовые области jsfiddle.net/cknytax0/1 — Я хочу, чтобы содержимое переходило в ближайшую текстовую область к кнопке.
4. У вас есть несколько элементов с одним и тем же
id
(type_g1
): это недопустимый HTML. Хотя это не повлияет на этот вопрос, у вас, вероятно, возникнут другие проблемы.
Ответ №1:
Вы хотите что-то подобное?
$(function(){
$(".IMGtoHTML").click(function() {
var url = $(this).parents('.form-table').find('.form').find('textarea').val();
var display_html = '<img src="' url '">';
$('textarea').val(display_html);
});
});
$(function(){
$(".FLASHtoHTML").click(function() {
var url = $(this).parents('.form-table').find('.form').find('textarea').val();
var display_html = '<img src="' url '">';
$('textarea').val(display_html);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="form-table">
<tbody>
<tr>
<th scope="row">Typ</th>
<td>
<button class="IMGtoHTML" id="type_g1" name="type_g1" type="button">JPEG/PNG/GIF</button>
<button class="FLASHtoHTML" id="type_g1" name="type_g1" type="button">Flash</button>
</td>
</tr>
<tr>
<th scope="row">Code HTML</th>
<td>
<button class="IMGtoHTML" id="type_g1" name="type_g1" type="button">JPEG/PNG/GIF</button>
<button class="FLASHtoHTML" id="type_g1" name="type_g1" type="button">Flash</button>
<div class="form">
<textarea name="code_g1" id="code_g1" placeholder="" rows="5" cols="50">https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png</textarea>
</div>
</td>
</tr>
</tbody>
</table>
Комментарии:
1. К сожалению, у меня это не сработает, потому что мне нужно иметь несколько подобных форм на веб-сайте. Содержимое будет размещено во всей текстовой области jsfiddle.net/wo4vujx0/1
2. Извините! это действительно работает! СПАСИБО, мне просто нужно изменить $ (‘textarea’).val(display_html); на $(this).parents(‘.form-table’).find(‘.form’).find(‘textarea’).val();
Ответ №2:
Ваш обработчик кликов не будет работать для двух верхних кнопок, поскольку $(this).next().next('.form')
выдаст пустой объект jQuery. Вместо этого я бы заменил поиск текстовой области селектором на основе идентификатора: $('#code_g1').val()
.
Ответ №3:
Ваш путь был неправильным.
from: var url = $(this).next().next(‘.form’).find(‘textarea’).val();
кому: var url = $(‘#code_g1’).val();
$(document).ready(function(){
$(function(){
$(".IMGtoHTML").click(function() {
var url = $('#code_g1').val();
var display_html = '<img src="' url '">';
$('textarea').val(display_html);
});
});
$(function(){
$(".FLASHtoHTML").click(function() {
var url = $('#code_g1').val();
var display_html = '<img src="' url '">';
$('textarea').val(display_html);
});
});
});
textarea {
width:350px;
height:100px;
}
<table class="form-table">
<tbody>
<tr>
<th scope="row">Typ</th>
<td>
<button class="IMGtoHTML" id="type_g1" name="type_g1" type="button">JPEG/PNG/GIF</button>
<button class="FLASHtoHTML" id="type_g1" name="type_g1" type="button">Flash</button>
</td>
</tr>
<tr>
<th scope="row">Code HTML</th>
<td>
<button class="IMGtoHTML" id="type_g1" name="type_g1" type="button">JPEG/PNG/GIF</button>
<button class="FLASHtoHTML" id="type_g1" name="type_g1" type="button">Flash</button>
<div class="form">
<textarea name="code_g1" id="code_g1" placeholder="" rows="5" cols="50">https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png</textarea>
</div>
</td>
</tr>
</tbody>
</table>
Ответ №4:
Согласно вашей html-структуре $ (this).next().next(‘.form’) будет работать только для нижних кнопок. Используйте $(‘.form’).find(‘textarea’).val()
Ответ №5:
Возможно, вы пытаетесь сделать это:
$(function(){
$(".IMGtoHTML").click(function() {
var url = $('textarea').val();
var display_html = '<img src="' url '">';
$('textarea').text(display_html);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="form-table">
<tbody>
<tr>
<th scope="row">Typ</th>
<td>
<button class="IMGtoHTML" id="type_g1" name="type_g1" type="button">JPEG/PNG/GIF</button>
<button class="FLASHtoHTML" id="type_g1" name="type_g1" type="button">Flash</button>
</td>
</tr>
<tr>
<th scope="row">Code HTML</th>
<td>
<button class="IMGtoHTML" id="type_g1" name="type_g1" type="button">JPEG/PNG/GIF</button>
<button class="FLASHtoHTML" id="type_g1" name="type_g1" type="button">Flash</button>
<div class="form">
<textarea name="code_g1" id="code_g1" placeholder="" rows="5" cols="50">https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png</textarea>
</div>
</td>
</tr>
</tbody>
</table>
Ответ №6:
Вам просто нужно изменить «val()» на «.text()»
$(function(){
$(".IMGtoHTML").click(function() {
var url = $(this).next().next('.form').find('textarea').text();
var display_html = '<img src="' url '">';
$(this).next().next('.form').find('textarea').val(display_html);
});
});
$(function(){
$(".FLASHtoHTML").click(function() {
var url = $(this).next('.form').find('textarea').text();
var display_html = '<img src="' url '">';
$(this).next('.form').find('textarea').val(display_html);
});
});
Спасибо