前 4 li 元素的 onClick 工作,但之后的每个人都不起作用 - 在 FF 3.6 和 Chrome 中


First 4 li element's onClick work but everyone after doesn't - in FF 3.6 and Chrome

很抱歉标题令人困惑,但这是我能描述的最好的......所以我有一个TD元素,当双击它时,jquery ajax函数从PHP脚本返回一个ul。

新代码(对不起这么多):

以下是 jQuery Ajax 代码:

    //Create PU:
    $('#DD_'+IDNum).append('<div class="popUp" id="PU_'+IDNum+'"></div>');
    //ajax:
    $.ajaxSetup ({
        cache: false
    });
    var ajax_load = '<img class="loading" id="LG_'+IDNum+'" src="../images/loading.gif" />';
    if(key==0)
        var term = '';
    else
        var term = $('#TC_'+IDNum).val();
    //load() functions
    var loadUrl = "./ddGet.php?Ele="+element+"&Client="+ClientID+"&vendorName="+vendorName+"&id="+IDNum+"&term="+term;
    $('#PU_'+IDNum+'').html(ajax_load).load(loadUrl);

以下是 PHP 的一个片段:

$result = mysql_query($query) or die(mysql_error());
$response= '<ul id="DD_UL">';
$resultArray = array();
$class = "li-odd";
$i = 1;
while($row = mysql_fetch_array($result))
{
    if(!in_array($row[0], $resultArray)){
    $resultArray[]=$row[0];
    if(isset($row[1]))
        $roW1 = ' - '.$row[1];
    else
        $roW1 = '';
    $response .= "'n".'<li id="LI_'.$id.'_'.$i.'" class="'.$class.'">'.$row[0].$roW1.'</li>';
    //selectLI(''LI_'.$id.'_'.$i.''')
    if($class == "li-odd")
        $class = "li-even";
    else
        $class = "li-odd";
    $i++;
    }
}
$response .= '</ul>';
echo $response;

以下是响应文本:

<ul id="DD_UL">
<li id="LI_1_1_1" class="li-odd">E02_02</li>
<li id="LI_1_1_2" class="li-even">E02_03</li>
<li id="LI_1_1_3" class="li-odd">E02_04</li>
<li id="LI_1_1_4" class="li-even">E02_05</li>
<li id="LI_1_1_5" class="li-odd">E02_06</li>
<li id="LI_1_1_6" class="li-even">E02_07</li>
<li id="LI_1_1_7" class="li-odd">E02_08</li>
<li id="LI_1_1_8" class="li-even">E02_09</li>
<li id="LI_1_1_9" class="li-odd">E02_10</li>
<li id="LI_1_1_10" class="li-even">E02_11</li>
<li id="LI_1_1_11" class="li-odd">E02_13</li>
<li id="LI_1_1_12" class="li-even">E02_14</li>
<li id="LI_1_1_13" class="li-odd">E02_20</li>
</ul>

最后,在 UL 显示后调用的分配 .live 的新功能:

function selectLI(){
        $('#DD_UL').live('click',function(e){
        var id = e.target
        id = $(id).attr('id');
        var IDNum = id.substr(3);
        IDNum = IDNum.substring(0,IDNum.lastIndexOf("_"));
        var newVal = $('#'+id).html();
        if(newVal.indexOf(" - ")>0)
            newVal = newVal.substring(0, newVal.indexOf(" - "));
        $('#TC_'+IDNum).val(newVal);
        });  
    }

不再那么简单了吧? 首先,我注意到在Chrome中,onclick只有在像前4个li左右点击之一时才有效。 在前四个(左右)之后,什么都不会发生。 然后我注意到FF 3.6也在做同样的事情。 我检查了IE(尽管该页面并不意味着在IE中运行)并且它起作用了。 最后FF 4也可以正常工作。

我说"左右"是因为有时它是第一个 4,5,6,7...... 有时似乎有一种模式,但我无法弄清楚。 我会发布更多代码,但是有很多代码,我看不出有什么意义,因为问题基本上发生在上面的响应文本中。

我不知道下一步该怎么做。

一个建议:

从定位点中删除所有onClick属性。相反,请在 UL 元素上设置 ID 属性(例如 list )。

然后,将其添加到您的 jQuery 代码中:

$('#list').live('click', function(e) {
    var anchor = e.target;
    // do stuff with your anchor
});

现场演示:http://jsfiddle.net/7Lqtn/

嗯。我似乎无法复制您的问题(尽管我没有Firefox 3.6进行测试)。

你能在JSFiddle上测试它吗:http://jsfiddle.net/rQYFW/

我已经让它在Firefox 4,Chrome 11,IE 9中正常工作。