0

也许你能发现一些我看不到的东西:

这是我的代码

if(jQuery.urlParam('returnview')) {     
    var ret = jQuery.urlParam('returnview');
    var iid = jQuery.urlParam('iid'); 
    window.location = 'index.php?option=mycomponent&view='+ret+'&Itemid='+iid+'&lang=en';
} else  if(!jQuery.urlParam('returnview')){
  window.location = 'index.php?option=mycomponent&view=myview&Itemid=380&lang=en&sent=1'; 
} else {
  alert('something is dodge');
}

这是功能:

jQuery.urlParam = function(name){
   var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
   return results[1] || 0;
}

现在,如果在我的“来自”URL 中定义了一个“returnview”,它就可以正常工作。但是,如果没有定义 returnview,它应该转到第二种情况,或者即使失败,也抛出警报。

谁能看到我在这里做错了什么明显的事情?

谢谢

雅克

4

3 回答 3

2

您的第三个条件永远不会受到打击,因为您正在测试真/假,所以让我们删除它,留下:

if(jQuery.urlParam('returnview')) {     
    var ret = jQuery.urlParam('returnview');
    var iid = jQuery.urlParam('iid'); 
    window.location = 'index.php?option=mycomponent&view='+ret+'&Itemid='+iid+'&lang=en';
} else{
  window.location = 'index.php?option=mycomponent&view=myview&Itemid=380&lang=en&sent=1'; 
} 

然后让我们将变量移到 ifs 之外并专门检查 false(如果返回的值等于 false,这需要更新您的原始函数,我们在下面执行此操作):

var ret = jQuery.urlParam('returnview');
var iid;

if(ret === false) {     
   window.location = 'index.php?option=mycomponent&view=myview&Itemid=380&lang=en&sent=1'; 
} else{
  iid = jQuery.urlParam('iid'); 
  window.location = 'index.php?option=mycomponent&view='+ret+'&Itemid='+iid+'&lang=en';  
} 

...最后让我们修复您的原始功能:

jQuery.urlParam = function(name){
   var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
   return (results && results[0] ? results[0] : false);
}

我还没有测试过,但我认为应该可以解决它

于 2013-03-19T10:05:16.823 回答
1

检查一下jQuery.urlParam('returnview') 我很确定如果没有设置值,你会得到undefined

尝试jQuery.urlParam('returnview') === undefined

另请查看这篇文章:获取转义的 URL 参数

于 2013-03-19T09:55:46.127 回答
0

只需根据您的函数是否返回真值有条件地设置 url 参数:

var ret = jQuery.urlParam('returnview');
var iid = jQuery.urlParam('iid');

var view = ret || "myview";
var id = iid || "380";

window.location = 'index.php?option=mycomponent&view='+
                   view + '&Itemid=' + id + '&lang=en';

对于您的urlParam函数,您需要确保只捕获参数本身,而不是整个"&abc=xyz"段。您只需在所需部分周围添加括号即可捕获该部分,然后获取第二个匹配项(第一个索引)。在取消引用匹配数组之前,检查它是否不为空:

jQuery.urlParam = function(name){
    var re = RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = window.location.href.match(re);
    return results ? results[1] : null;
}
于 2013-03-19T10:13:52.140 回答