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

时间:2011-08-30 00:56:31

标签: javascript jquery mysql jquery-ui jquery-plugins

我是网络开发的新手,这是我在网站上的第一个问题。

我正在尝试使用Joomla的jQuery自动完成小部件(因此是jQuery调用),并且已经通过数据库连接进行管理,以便在我的表txtRow1中输入第一个文本行。此输入成功触发股票名称的自动完成小部件。

当我使用“添加”行按钮时,自动完成功能不再适用于下一行txtRow2。如何激活桌面上所有txtRow输入行的自动完成功能?

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

正如您可能已经知道的那样,所有代码都来自Web教程,并且是其他人的工作。

谢谢你的时间。

更新:感谢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);

?>

1 个答案:

答案 0 :(得分:1)

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

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

修改

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

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

所以当你有;

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

click事件仅适用于加载页面时存在的元素。

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

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

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