1

这是html

<!DOCTYPE html>
    <html>
    <title>Ingredient</title>
      <meta charset="utf-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="themes/receta.min.css" />
      <link rel="stylesheet" href="css/jquery.mobile.structure-1.1.0.min.css" /> 
      <script src="js/jquery-1.7.1.min.js"></script> 
      <script src="js/jquery.mobile-1.1.0.min.js"></script> 
      <script type="text/javascript" charset="utf-8" src="js/ingredients.js"></script>  

      <h1><center>INGREDIENTES</h1>
    <ul>
     <li onclick="this.parentNode.removeChild(this);">
      <input type="hidden" name="ingredients[]" value="Cheese" />
      Cheese
     </li>
     <li onclick="this.parentNode.removeChild(this);">
      <input type="hidden" name="ingredients[]" value="Ham" />
      Ham
     </li>
    </ul>
    <select onchange="selectIngredient(this);">
     <option value="Cheese">Cheese</option>
     <option value="Olives">Olives</option>
     <option value="Pepperoni">Pepperoni</option>
     <option value="Milk">Milk</option>
    </select>

      </html>

这是jquery

    function selectIngredient(select)
    {
      var $ul = $(select).prev('ul');

      if ($ul.find('input[value=' + $(select).val() + ']').length == 0)
        $ul.append('<li onclick="$(this).remove();">' +
          '<input type="hidden" name="ingredients[]" value="' + 
          $(select).val() + '" /> ' +
          $(select).find('option[selected]').text() + '</li>');
    }

这是我在选择另一种成分时需要看到的,这种成分应该与其他成分一起使用

当我运行这个 html 和 jquery 时它不起作用。如果我选择它,它应该将另一种成分添加到列表中,但它不会发生。

4

2 回答 2

3

我认为这里:

$(select).find('option[selected]').text()

你实际上是这个意思:

$(select).find('option:selected').text()

但是为什么不再使用$(select).val()呢?在您的 HTML 中,文本和值是相同的。

于 2012-11-08T02:02:25.130 回答
2

jsBin demo

(purified) HTML

<h1>INGREDIENTES</h1>
<ul>
 <li>
  <input type="hidden" name="ingredients[]" value="Cheese" />
  Cheese
 </li>
 <li>
  <input type="hidden" name="ingredients[]" value="Ham" />
  Ham
 </li>
</ul>


<select>
 <option value="Cheese">Cheese</option>
 <option value="Olives">Olives</option>
 <option value="Pepperoni">Pepperoni</option>
 <option value="Milk">Milk</option>
</select>

(funnyfied) jQ

function selectIngredient(select){
      
      var selVal = $(select).val();
      var $ul    = $(select).prev('ul');
      var exists = $ul.find('input[value=' + selVal +']').length;
  
      if ( !exists ){        
          $ul.append('<li>' +
          '<input type="hidden" name="ingredients[]" value="' + selVal + '" /> ' +
          selVal + '</li>');        
      }
}


$('ul').on('click','li',function(){
   $(this).remove();
});

$('select').change(function(){
   selectIngredient(this);
});

If you like it more structured you can use:

    var input = $('<input />',{
          type : 'hidden',
          name : 'ingredients[]',
          value: selVal
    });
    $('<li />', { text: selVal }).prepend( input ).appendTo( $ul );      
于 2012-11-08T02:10:51.740 回答