Javascript 单击jQueryMobile单选按钮时会生成错误

Javascript 单击jQueryMobile单选按钮时会生成错误,javascript,jquery,html,mobile,radio,Javascript,Jquery,Html,Mobile,Radio,我正在使用jquerymobile1.4.2,单选按钮出现了一些非常恼人的问题。问题是它们不起作用 我浏览了互联网,但没有找到解决办法;所以,也许其他人没有像我一样有这个问题。然而,我确实认为我做的每件事都是“正确的”,所以希望这个问题能够帮助其他人,如果他们也经历过这个问题的话 页面的输出HTML,但用于生成它的代码是: <form method="post" action="/category/log"> <input type="hidden" name="id"

我正在使用jquerymobile1.4.2,单选按钮出现了一些非常恼人的问题。问题是它们不起作用

我浏览了互联网,但没有找到解决办法;所以,也许其他人没有像我一样有这个问题。然而,我确实认为我做的每件事都是“正确的”,所以希望这个问题能够帮助其他人,如果他们也经历过这个问题的话

页面的输出HTML,但用于生成它的代码是:

<form method="post" action="/category/log">
    <input type="hidden" name="id" value="<%: Model.CurrentCategory.Id %>" />

    <div data-role="controlgroup">
        <% Dim elementId = "personId"%>
        <% For Each e In Model.Engineers%>
            <% Dim formattedId = elementId & "-" & e.Id%>
            <input type="radio" name="<%:elementId %>" id="<%:formattedId %>" value="<%:e.Id %>" />
            <label for="<%:formattedId %>"><%:e.Name%></label>
        <%Next%>
    </div>

    <input type="submit" value="Log Visit" />
</form>

单击单选按钮时,会生成以下错误:
uncaughttypeerror:Object#没有方法“substring”

它报告这种情况发生在:
jquery.mobile-1.4.2.js:2656

可以在此处找到此操作的图像:没有方法“substring”>

如果有人能帮上忙那就太好了,如果还有其他人有这个问题,希望这也能帮助他们


谢谢,

我不知道是什么问题,但最新版本似乎可以解决它:

我也有同样的问题(仅适用于jqm v1.4.2,不适用于jqm v1.4.0)

问题的根源是表单中存在隐藏的输入字段

问题发生在$.mobile.path.hashToSelector(哈希)中,原因是对象(隐藏的输入字段)作为参数传递,然后子字符串函数应用于该对象

下面的hack解决了这个问题(文件jquery.mobile-1.4.2.js,第2654行)

//如果要用作选择器,则对哈希中的奇怪字符进行转义
hashToSelector:函数(哈希){
/*黑客开始*/
if(typeof hash!=“string”)返回hash;
/*劈端*/
var hasHash=(hash.substring(0,1)=“#”);
if(hasHash){
hash=hash.substring(1);
}
return(hasHash?#“:”)+hash.replace(/([!“#$%”和“()*+,./:;?@[\]^`{124;}~])/g,“\\$1”);
},
但我不知道这种黑客行为是否会在代码的其他地方产生另一个问题(最好不要修改原始库)

如上所述,jqm的git版本(1.5-pre)解决了您在中看到的问题(与jqm 1.4.2相比,这就是问题所在)

        // Escape weird characters in the hash if it is to be used as a selector
        hashToSelector: function( hash ) {

            /* Hack begin */
            if(typeof hash != "string") return hash;
            /* Hack end */

            var hasHash = ( hash.substring( 0, 1 ) === "#" );
            if ( hasHash ) {
                hash = hash.substring( 1 );
            }
            return ( hasHash ? "#" : "" ) + hash.replace( /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g, "\\$1" );
        },