JavaScript 拆分函数不起作用
javascript split function not working
我有以下代码。
var oldBeforeUnload = window.onbeforeunload;
window.onbeforeunload = function()
{
if(modifiedItems && modifiedItems != null)
{
var modifiedItemsArr = modifiedItems.split(",");
if(window.showModalDialog)
{
window.returnValue = modifiedItemsArr;
}
else
{
if (window.opener && window.opener.setFieldValue)
{
window.opener.setFieldValue(modifiedItemsArr);
}
}
}
return oldBeforeUnload();
};
当我在IE中运行时,它会抛出一个
error : object doesnt support property or method split.
在 ff 中,它的退出没有任何日志。
on alert(modifiedItems) //the output is Ljava.lang.object;@c14d9
任何人都可以说出为什么拆分不起作用或我的修改项目错误。
修改项必须是字符串才能使用 split。
警报(修改项的类型(;
var oldBeforeUnload = window.onbeforeunload;
window.onbeforeunload = function()
{
if(modifiedItems && modifiedItems != null)
{
alert(typeof modifiedItems);
var modifiedItemsArr = modifiedItems.split(",");
if(window.showModalDialog)
{
window.returnValue = modifiedItemsArr;
}
else
{
if (window.opener && window.opener.setFieldValue)
{
window.opener.setFieldValue(modifiedItemsArr);
}
}
}
return oldBeforeUnload();
};
变量"modifiedItems"应该是拆分函数工作的字符串。在您的情况下,警报(修改的项目(应该提醒字符串值。我建议您检查"修改的项目"。split(( 是字符串对象中的一个函数。
拆分是一种可以调用字符串的方法。 看起来好像您正在尝试拆分对象而不是字符串。 以下是正确和不正确的用法:
"a,s,d".split(",") // returns ['a','s','d']
{obj:true}.split(",") // will throw the error you are seeing becuase it is an object
要确认这一点,您可以使用以下内容:
console.log(typeof modifiedItems) // <- will output the vaiable type
项应该是一个对象,你不能拆分它,获取你试图从修改的项目中拆分出来的值。 另一方面,您正在使用看起来不需要的窗口命名空间。 查看下面的一些链接,以确定是否真的应该使用 window 对象。
在 Window 对象上设置属性是否被视为不良做法?
为什么要附加到窗口 [已编辑]
使用这种跨浏览器方法,可以使一切正常。
可以在以下位置找到此脚本以供下载:http://blog.stevenlevithan.com/archives/cross-browser-split
它一直对我有用。
/*!
* Cross-Browser Split 1.1.1
* Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
* Available under the MIT License
* ECMAScript compliant, uniform cross-browser split method
*/
/**
* Splits a string into an array of strings using a regex or string separator. Matches of the
* separator are not included in the result array. However, if `separator` is a regex that contains
* capturing groups, backreferences are spliced into the result each time `separator` is matched.
* Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably
* cross-browser.
* @param {String} str String to split.
* @param {RegExp|String} separator Regex or string to use for separating the string.
* @param {Number} [limit] Maximum number of items to include in the result array.
* @returns {Array} Array of substrings.
* @example
*
* // Basic use
* split('a b c d', ' ');
* // -> ['a', 'b', 'c', 'd']
*
* // With limit
* split('a b c d', ' ', 2);
* // -> ['a', 'b']
*
* // Backreferences in result array
* split('..word1 word2..', /([a-z]+)('d+)/i);
* // -> ['..', 'word', '1', ' ', 'word', '2', '..']
*/
var split;
// Avoid running twice; that would break the `nativeSplit` reference
split = split || function (undef) {
var nativeSplit = String.prototype.split,
compliantExecNpcg = /()??/.exec("")[1] === undef, // NPCG: nonparticipating capturing group
self;
self = function (str, separator, limit) {
// If `separator` is not a regex, use `nativeSplit`
if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
return nativeSplit.call(str, separator, limit);
}
var output = [],
flags = (separator.ignoreCase ? "i" : "") +
(separator.multiline ? "m" : "") +
(separator.extended ? "x" : "") + // Proposed for ES6
(separator.sticky ? "y" : ""), // Firefox 3+
lastLastIndex = 0,
// Make `global` and avoid `lastIndex` issues by working with a copy
separator = new RegExp(separator.source, flags + "g"),
separator2, match, lastIndex, lastLength;
str += ""; // Type-convert
if (!compliantExecNpcg) {
// Doesn't need flags gy, but they don't hurt
separator2 = new RegExp("^" + separator.source + "$(?!''s)", flags);
}
/* Values for `limit`, per the spec:
* If undefined: 4294967295 // Math.pow(2, 32) - 1
* If 0, Infinity, or NaN: 0
* If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
* If negative number: 4294967296 - Math.floor(Math.abs(limit))
* If other: Type-convert, then use the above rules
*/
limit = limit === undef ?
-1 >>> 0 : // Math.pow(2, 32) - 1
limit >>> 0; // ToUint32(limit)
while (match = separator.exec(str)) {
// `separator.lastIndex` is not reliable cross-browser
lastIndex = match.index + match[0].length;
if (lastIndex > lastLastIndex) {
output.push(str.slice(lastLastIndex, match.index));
// Fix browsers whose `exec` methods don't consistently return `undefined` for
// nonparticipating capturing groups
if (!compliantExecNpcg && match.length > 1) {
match[0].replace(separator2, function () {
for (var i = 1; i < arguments.length - 2; i++) {
if (arguments[i] === undef) {
match[i] = undef;
}
}
});
}
if (match.length > 1 && match.index < str.length) {
Array.prototype.push.apply(output, match.slice(1));
}
lastLength = match[0].length;
lastLastIndex = lastIndex;
if (output.length >= limit) {
break;
}
}
if (separator.lastIndex === match.index) {
separator.lastIndex++; // Avoid an infinite loop
}
}
if (lastLastIndex === str.length) {
if (lastLength || !separator.test("")) {
output.push("");
}
} else {
output.push(str.slice(lastLastIndex));
}
return output.length > limit ? output.slice(0, limit) : output;
};
// For convenience
String.prototype.split = function (separator, limit) {
return self(this, separator, limit);
};
return self;
}();
- 监视函数从服务返回不起作用,但作用域函数起作用
- Ember Data DS.Model's set函数不起作用
- Javascript:If-then语句在函数中不起作用
- JavaScript链接在点击时不起作用;函数在页面加载时工作
- AngularJS指令部分应用的函数don'不起作用
- 为什么我的JavaScript堆栈排序函数不起作用
- 嵌套到另一个函数中的Fancybox函数;不起作用
- Javascript onchange()函数不起作用
- I'我试图在文本区域中进行特定的输入,调用特定的javascript函数,但没有成功;不起作用
- javascript函数调用不起作用
- 另一个Ajax函数触发的Ajax函数不起作用
- 从PHP调用JS函数不起作用
- 清除函数中if语句内部不起作用的间隔
- js函数堆栈传入变量,.hide()不起作用
- jQuery validate函数不起作用
- jQuery克隆函数在chrome中不起作用
- JS-窗口宽度函数不起作用
- 函数调用不起作用
- .hasClass 在 onclick 函数中不起作用,但删除和添加类函数可以
- javascript函数,该函数不起作用,但不会显示任何错误