我正在使用一个正常工作的keyup jquery函数填充无序列表。但是,一旦返回信息,我想通过点击li来获取id:
这是我的功能:
if( $_REQUEST["assist"] ) {
$search_sql = "SELECT * FROM `inventory` WHERE upper(name) LIKE upper('%".$_REQUEST['assist']."%') and active = '1' OR upper(part_num) LIKE upper('%".$_REQUEST['assist']."%') and active = '1' ORDER BY `part_num` ASC ";
$result = mysql_query($search_sql);
if (mysql_num_rows($result) > 0) {
// output data of each row
while ($row = mysql_fetch_array($result)) {
echo '<li class="assist"><div id="assist"><input type="hidden" class="assist_id" value="'.$row['inv_id'].'">'.$row['part_num'].' | '.$row['name'].'</div></li>';
}
} else {
echo '<h2>There are no parts matching "'.$_REQUEST['assist'].'"</h2>';
}
}
将结果放入此html:
<ul id="assist-search-value"></ul>
我的javascript是
$('#assist-search-value li').click(function() {
var option = $(this).find('.assist_id').val();
alert(option);
});
然而,当我点击结果时,我只得到列表中的第一个id,而不是我想要的那个。
答案 0 :(得分:2)
请不要在生产环境中使用它。
1)您正在使用不推荐使用的mysql PHP库。请改用mysqli或PDO
2)你将自己留给SQL Injection。至少,请使用mysql_real_escape_string
3)HTML ID也必须是唯一的
4)您还需要关闭在PHP中打开的<input>
标记。 <input type="hidden" class="assist_id" value="'.$row['inv_id'].'"/>
但是,要回答您的问题 - 您可以使用类li's
连接assist
的处理程序。当它们被动态添加时,您需要将处理程序添加到绑定到它时已存在的元素。您可以使用on执行此操作。
$('#assist-search-value').on('click', 'li.assist', function() {
var productId = $(this).find("input.assist_id").val();
alert(productId);
});
答案 1 :(得分:0)
你可以参考这个:
使用children()
代替find()
<ul id="assist-search-value">
<li class="assist"><input type="hidden" class="assist_id" value="1" />test 1</li>
<li class="assist"><input type="hidden" class="assist_id" value="2" />test 2</li>
<li class="assist"><input type="hidden" class="assist_id" value="3" />test 3</li>
<li class="assist"><input type="hidden" class="assist_id" value="4" />test 4</li>
</ul>
然后你的jquery可能看起来像这样:
$(document).ready(function() {
$("ul#assist-search-value").on("click", "li.assist", function() {
alert($(this).children("input.assist_id").val());
});
});