1

这让我停留了一段时间......我的关于 onclick JavaScript 调用的网络搜索有时会在 onClick 中使用大写 C,有时在 onclick 中使用大写 C。我的代码是 JQuery Mobile 应用程序的一部分,但 onclick 是 JS。所以,它看起来像这样:

domEntry = '<li><a href="#poet-details"';
domEntry += ' onclick="getPoetDetails('+ poet_name + ')">';
domEntry += poet_name;
domEntry += '</a></li>';

我要把它添加到一个div中。'poet_name 确实在第 3 行正确显示。如何在 getPoetDetails 中访问它?我说的对吗?另外,请参阅:http: //jsfiddle.net/brucewhealton/XF5AJ/

可以在给出的链接中看到函数 getPoetDetails。我是否通过事件对象变量访问它?应用程序将查询字符串发送到另一个位置 dbpedia.org/sparql,并取回 JSON。我需要第二个查询的poet_selected 或poet_name 来获取有关诗人的详细信息,因为我的应用程序到目前为止只列出诗人,不是很有趣。我想弄清楚这一点,以便我可以通过让用户从 DBpedia.org 上的“Poets_by_nationality”类别中选择国籍来启动我的应用程序。我的问题是捕获用户的选择,他们在 JQuery Mobile 应用程序中单击或点击的内容并将其发送到另一个功能。谢谢,布鲁斯

4

3 回答 3

1

如果poet_name是一个字符串,那么它应该用引号引起来:

domEntry += ' onclick="getPoetDetails(\''+ poet_name + '\')">';

因此生成的 HTML 将如下所示:

onclick="getPoetDetails('Henry Abbey')"

此外,您需要从 jsfiddle 设置中选择“no wrap”而不是“onLoad”以使函数成为getPoetDetails全局函数。

编辑:这是另一种方法:

domEntry = '<li><a href="#poet-details" class="poet">';
domEntry += poet_name;
domEntry += '</a></li>';

然后就在循环之后:

$('.poet').click(function() {
    getPoetDetails($(this).text());
});
于 2012-10-03T01:55:28.433 回答
1

因此,您的诗人姓名锚标签的 onClick 有问题吗?我认为最好的方法是没有任何内联javascript。有了这个,当你在窗口中启动你的javascript或者你选择这样做时,你应该添加这个小行

$('#result').delegate('a', 'click', getPoetDetails);

这告诉 jQuery 查看#result 的内部,并且每当有一个新的锚标记时应用这个点击事件给它。点击事件应该调用 getPoetDetails。

现在你在哪里创建和插入你的锚标签,你应该摆脱 javascript 的东西,而是拥有这个

domEntry = '<li><a href="#poet-details"';
domEntry += 'data-name="'+ poet_name + '">';
domEntry += poet_name;
domEntry += '</a></li>';

这是给锚点一个数据值 name 和诗人名字的值。现在您可以使用 jQuery 在 getPoetDetails 函数中获取这些数据。它的开始现在可以是这样,其余的保持不变。

var getPoetDetails = function(){
var poet_name_selected = $(this).data('name');
// show loader

我很确定您在调用获取 json 数据时做错了什么,或者您解析错误,但现在至少 getPoetDetails 正确获取了名称。为了使其显示为在 jsfiddle 中工作,您需要将 onLoad 下拉菜单更改为 noWrap 正文,因为您已经在 js 中准备好文档。

我希望这有帮助。

于 2012-10-04T18:26:27.693 回答
0

如果我正确理解您的问题,在声明的 getPoetDetails(poet_name_selected) 函数中,poet_name_selected 将是 poet_name。

于 2012-10-03T01:50:09.013 回答