javascript - jQuery UI 自动完成小部件 - 每次我向表中添加一行时都尝试使用它

标签 javascript jquery mysql jquery-ui jquery-plugins

我对网络开发完全陌生,这是我在网站上的第一个问题。

我正在使用 Joomla 试验 jQuery 自动完成小部件(因此调用 jQuery),并设法通过数据库连接让它工作,用于我的表 txtRow1 中的第一个文本行输入。此输入成功触发了股票名称的自动完成小部件。

当我使用“添加”行按钮时,自动完成功能不再适用于下一行 txtRow2。如何让表格中所有 txtRow 输入行都触发自动完成功能?

我尝试使用 id 'starts with' 表达式,因为所有表输入都将称为 txtRowX,但它仍然只适用于第一个,txtRow1。

您可能会说,所有代码均来自网络教程,是其他人的作品。

谢谢你的时间。

更新:感谢 Griegs 链接到另一个问题,以下代码有效,但我不知道为什么:

   jQuery(function(){
   jQuery('[id^="txtRow"]').live('keyup.autocomplete', function(){
   jQuery(this).autocomplete({
    source : "stockdata.php",
    minLength: 2
    });
    });
    });

HTML:

<script type="text/javascript">
jQuery(function() {

    jQuery('[id^="txtRow"]').autocomplete({
            source: "stockdata.php",
            minLength: 2
        });
    });

function addRowToTable()
{
var tbl = document.getElementById('tblSample');
var lastRow = tbl.rows.length;
// if there's no header row in the table, then iteration = lastRow + 1
var iteration = lastRow;
var row = tbl.insertRow(lastRow);

// left cell
var cellLeft = row.insertCell(0);
var textNode = document.createTextNode(iteration);
cellLeft.appendChild(textNode);

// right cell
var cellRight = row.insertCell(1);
var el = document.createElement('input');
el.type = 'text';
el.name = 'txtRow' + iteration;
el.id = 'txtRow' + iteration;
el.size = 40;

el.onkeypress = keyPressTest;
cellRight.appendChild(el);

// select cell
var cellRightSel = row.insertCell(2);
var sel = document.createElement('select');
sel.name = 'selRow' + iteration;
sel.options[0] = new Option('text zero', 'value0');
sel.options[1] = new Option('text one', 'value1');
cellRightSel.appendChild(sel);

}
</script>

<form action="tableaddrow_nw.html" method="get">
<p>
<input type="button" value="Add" onclick="addRowToTable();" />
<input type="button" value="Remove" onclick="removeRowFromTable();" />
<input type="button" value="Submit" onclick="validateRow(this.form);" />
<input type="checkbox" id="chkValidate" /> Validate Submit
</p>
<table border="1" id="tblSample">
<tr>
<th colspan="3">Stocks</th>
</tr>
<tr>
<td>1</td>
<td><input type="text" name="txtRow1" id="txtRow1" size="40" /></td>
<td>
<select name="selRow0">
<option value="value0">text zero</option>
<option value="value1">text one</option>
</select>
</td>
</tr>
</table>
</form>

php文件:

<?php
$dbhost = 'host';
$dbuser = 'user';
$dbpass = 'pass';
$dbname = 'database';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);

$return_arr = array();

/* If connection to database, run sql statement. */
if ($conn)
{
$fetch = mysql_query("SELECT * FROM stocknameticker where stock_name like '%" . mysql_real_escape_string($_GET['term']) . "%'"); 

/* Retrieve and store in array the results of the query.*/
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
    $row_array['id'] = $row['s_id'];
    $row_array['value'] = $row['stock_name'];
    $row_array['abbrev'] = $row['stock_ticker'];

    array_push($return_arr,$row_array);
}
}

mysql_close($conn);

echo json_encode($return_arr);

?>

最佳答案

在处理动态创建的元素时,您需要使用 live jquery 关键字。

$('[id^="txtRow"]').live("autocomplete", function(){
//your code here
});

编辑

这也可能有帮助; Bind jQuery UI autocomplete using .live()

当您在网页上动态创建元素时,jQuery 不会自动将其绑定(bind)到任何事件。

所以当你有;

$(".MyElement").click(...

点击事件将仅应用于加载页面时存在的元素。

如果您现在添加一个新元素并希望对它应用点击,您需要这样做;

$(".MyElement").live("click", function(...

指示 jQuery 扫描文档并将事件附加到新创建的元素。

关于javascript - jQuery UI 自动完成小部件 - 每次我向表中添加一行时都尝试使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7237650/

相关文章:

javascript - 在 Javascript 中使用多个提交按钮处理表单提交

jquery - 如果按钮有类做某事,如果有不同的类做其他不工作jquery

mysql - 选择具有最高评级的用户

php - 使用PHP在sql查询中插入NULL

mysql : Left Join and Inner Join in a subquery

javascript - 为什么 sequelize 忽略了references 属性?

javascript - 样式仅适用于前两张幻灯片

javascript - 在 JavaScript 中拖放链接

javascript - 如何编写用户单击三次时触发的自定义事件

jquery - Bootstrap 和 <button> 标签 - 事件未首次触发 - 仅限 iPad