jquery和/或javascript最简单的问题(但无法弄清楚)

时间:2010-07-16 00:33:12

标签: javascript jquery

使用jquery,

以下行有效,即调用radioClicks函数。

$("input:[name='"+54464+"']").bind( "click", radioClicks ); 

但这个没有:

$("input:[name='"+options.rowId+"']").bind( "click", radioClicks );

是的,你已经猜到了,options.rowId = 54464(至少在调试器中)。

我缺少什么?

由于

编辑:

我删除了:正如一些建议的那样,我使用了alert(options.rowId),它按预期显示了54464。此外,它不用于循环中。代码是:

function radioFormatter (cellvalue, options, rowObject)
{
    $("input[name='"+options.rowId+"']").bind( "click", radioClicks ); 

    if("checked" == cellvalue)
        return "<input type='radio' name='"+ name +"' id='"
               + options.colModel.name + "' value='" + options.rowId
               + "' checked>";

    return "<input type='radio' name='" + name + "' id='" +options.colModel.name
           +"' value='" + options.rowId + "'>";
}

它与jqgrid一起使用,其中我有一个包含多个列的行,其中包含一个单选按钮。

我已经尝试了一切我无法想到的事情......

由于

7 个答案:

答案 0 :(得分:1)

我不确定为什么第一个实际上有效,但:在那里是额外的,它应该就是这样:

$("input[name='"+options.rowId+"']").bind( "click", radioClicks );

:通常位于伪类或filters之前,但attribute-equals selector不需要它。


编辑:至于差异,您当时确定options.rowId == 54464 吗?在该行之前粘贴console.log(options.rowId),看看Chrome或Firebug中的结果是什么。

答案 1 :(得分:1)

我认为选择器是正确的。但是如果没有完整的代码,很难说出根本原因。

我的猜测是代码使用循环将事件侦听器附加到一组单选按钮,并且作者遇到臭名昭着的循环闭包问题。 options.rowId始终引用循环中的最后一个值。

无论如何,需要更多细节。

答案 2 :(得分:0)

我的猜测是options.rowId返回一个int 但是$(“input [name ='”+ options.rowId +“']”)需要一个字符串

var idname = options.rowId;
$("input:[name='"+idname+"']").bind( "click", radioClicks );

或使用firebug或chrome js debug来查找更多

答案 3 :(得分:0)

除了冒号错误之外,这段代码还可以。我认为你的调试器愚弄你。

您必须小心调试语句中的引用。如果您只是执行console.log(options),则调试器中的值可能会更改为options.rowId。尝试在绑定调用之前执行警报(options.rowId)。

alert("input[name='"+options.rowId+"']");
$("input[name='"+options.rowId+"']").bind( "click", radioClicks );

答案 4 :(得分:0)

围绕[attribute =] param引用并不是绝对必要的,所以

$("input[name=" + options.rowId + "]").bind( "click", radioClicks )

答案 5 :(得分:0)

我发现了问题,但不知道如何修复它:

这不起作用:

var options = {rowId:1223};
$("input:[name="+options.rowId]+"]").bind( "click", function(){
    alert('clickedz');
});

但这样做:

var options 1223;
$("input:[name="+options]+"]").bind( "click", function(){
    alert('clickedz');
});

我不是js专家,但问题似乎是如何创建选项对象。

答案 6 :(得分:-1)

看起来你有双引号 试试这个:

$("input:[name="+options.rowId+"]").bind( "click", radioClicks );  

似乎工作正常。 http://jsfiddle.net/EG2Yx/。检查您的其他代码?