идентификатор записи jquery и другие значения из встроенного модального

#jquery

#jquery

Вопрос:

я разрывал сосуды своего мозга, чтобы выяснить, почему это просто не сработает.

По какой-то причине он получает правильный идентификатор изображения, но просто не отправляет значения с ним. Я просто пытаюсь опубликовать 3 вещи с помощью jquery и встроенного модального поля.

У меня есть набор красиво обрезанных миниатюр с двумя маленькими значками под каждым большим пальцем. Пользователь, войдя в систему, может удалить большой палец (это работает нормально), но также пользователь может щелкнуть значок редактирования, и появится встроенное модальное окно с простым вводом и полем textarea для названия фотографии и комментария.

Я пытаюсь опубликовать идентификатор фотографии, а также значения полей ввода и текстовой области, чтобы я мог обработать данные post с помощью php-файла и обновить таблицу mysql.

Я вставил большой фрагмент кода, чтобы была понятна вся картина.

 <div class="clear rule"></div>

<ul>

<?php // grab the images for this gallery and crop them nice

$query = "SELECT * FROM mypage_media WHERE  uid=".$usrid." AND gid=".$_GET['gid'];
$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_array( $result )) { 
// start my thumbnails loop 
?>

<li id="<?php echo $row['id']; ?>" >

<div class="mythumbwrapper">

<a class="modal"  id="single_image" href="media/users/<?php echo $usrid; ?>/resized/800/<?php echo $row['image']; ?>">
<img class="mythumbs" src="includes/crop.php?src=media/users/<?php echo $usrid; ?>/<?php echo $row['image']; ?>amp;h=200amp;w=225" /> 
</a> 

<div class="icons">

<a href="#?w=500" rel="popup_<?php echo $row['id']; ?>" class="poplight">

<img src="images/edit.png" title="" alt="" border="0" >

</a>

<a href="javascript:void(0)" class="delete_thumb">

<img src="images/del.png" title="" alt="" border="0" >

</a>

</div>

</div>

</li>

////////////////////////////////////////////////
// the problem is below here
////////////////////////////////////////////////


<span id="popup_<?php echo $row['id']; ?>" class="popup_block">

<li id="<?php echo $row['id']; ?>" >

<input type="text" class="photoname" name="photoname" value="<?php echo $row['image'];?>" >
<br />
<textarea id="comment" ><?php echo $row[comment];?></textarea>

<a href="javascript:void(0)" class="save" >Save <?php echo $row['id'];?></a>

</li>

</span>

///////////////////////////////////////////////


<?php } 
// end my thumbnails loop
?>

</ul>

<script type="text/javascript">

$.noConflict();
jQuery(document).ready(function($) { // THIS FIXES THE CONFLICT WITH MOOTOOLS MODAL CLASS


///////////////////////////////////////////////////
// the jquery for the above inline modal is here
// the id is working in firebug but the photoname
// is always posting the first photo in the list
///////////////////////////////////////////////////


$('span li .save').click(function(){


var id = $(this).parent().attr('id'); 

var photo = $('input#photoname', $(this).parent()).attr('value'); 

var comment = $('input#comment', $(this).parent()).attr('value'); 


data = 'id='   id   'amp;photo='   photo   'amp;comment='   comment; 


$.ajax(  
{
type: "POST", 
url: "includes/update.php",  
data: data,
cache: false,

success: function()
{

// This success function just makes the inline modal close 

$('#fade , .popup_block').fadeOut(function() {
$('#fade, a.close').remove();  //fade them both out
});

return false;


}
});

});


/////////////////////////////////////////////////////



// Delete li process php and fade out li

$('li a.delete_thumb').click(function(){

if (confirm("Are you sure you want to delete this photo there is no undo?"))
{

var id = $(this).parent().parent().parent().attr('id'); 
data = 'id='   id;
var parent = $(this).parent().parent();

$.ajax(  
{
type: "POST", 
url: "includes/remove.php",  
data: data,
cache: false,

success: function()
{

parent.fadeOut('slow', function() {$(this).remove();});                  

}
});
}
});

//When you click on a link with class of poplight and the href starts with a # 

$('a.poplight[href^=#]').click(function() {

var popID = $(this).attr('rel'); //Get Popup Name
var popURL = $(this).attr('href'); //Get Popup href to define size

//Pull Query amp; Variables from href URL

var query= popURL.split('?');
var dim= query[1].split('amp;');
var popWidth = dim[0].split('=')[1]; //Gets the first query string value

//Fade in the Popup and add close button

$('#'   popID).fadeIn().css({ 'width': Number( popWidth ) }).prepend('<a href="#" class="close"><img src="images/close_pop.png" class="btn_close" title="Close Window" alt="Close" /></a>');

//Define margin for center alignment (vertical   horizontal)
//we add 80px to the height/width to accomodate for the padding  and border width defined in the css

var popMargTop = ($('#'   popID).height()   80) / 2;
var popMargLeft = ($('#'   popID).width()   80) / 2;

//Apply Margin to Popup

$('#'   popID).css({
'margin-top' : -popMargTop,
'margin-left' : -popMargLeft
});

//Fade in Background

$('body').append('<div id="fade"></div>'); //Add the fade layer to bottom of the body tag.
$('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn(); 
//Fade in the fade layer - .css({'filter' : 'alpha(opacity=80)'}) is used to fix the IE Bug on fading transparencies 

return false;
});

//Close Popups and Fade Layer

$('a.close, #fade').live('click', function() { //When clicking on the close or fade layer...
$('#fade , .popup_block').fadeOut(function() {
$('#fade, a.close').remove();  //fade them both out
});

return false;

});
});

</script>
  

Единственное значение, которое я получаю, — это идентификатор

но имя фотографии и комментарий возвращаются либо без уточнения, либо только с первой записью в цикле.

Заранее спасибо 🙂 Джон.

Ответ №1:

На ваших входных данных нет идентификаторов … только имена и классы.

 $('input.photoname', $(this).parent()).val();
  

… я полагаю, это то, что вы ищете.

РЕДАКТИРОВАТЬ: также заметил это … текстовые области не являются входными данными.

Попробуйте это:

 $('#comment').val()
//or
$('textarea#comment').val()
  

также прочитайте эту ссылку об эффективности селектора -> производительность селектора jquery

Ответ №2:

давайте немного изменим ваш html, у вас не должно быть ничего между вашими элементами li

 <ul>

    <li id="li_123" >

        <input type="text" id="photoname" class="photoname" name="photoname" value="someimage" />

        <textarea id="comment">some comment</textarea>

        <a href="#" class="save" >Save 123</a>

    </li>
</ul>
  

тогда вот правильный jquery

 $('li .save').click(function(event) {
    event.preventDefault()
    var id = $(this).parent().attr('id');
    var photo = $(this).closest('li').find('#photoname').val();
    var comment = $(this).closest('li').find('#comment').val();
    var info = {
        id: id,
        photo: photo,
        comment: comment
    }

    $.ajax({
        type: "POST",
        url: "includes/update.php",
        data: info,
        cache: false,

        success: function() {
            // This success function just makes the inline modal close
            $('#fade , .popup_block').fadeOut(function() {
                $('#fade, a.close').remove(); //fade them both out
            });
            return false;
        }
    });
});
  

ДЕМОНСТРАЦИЯ